0038790902
- KompasDispatcher: выделенный STA-поток + очередь задач, InvokeAsync<T>, inline-выполнение вложенных вызовов, корректный Dispose - NativeMethods: attach к запущенному COM (CLSIDFromProgID + GetActiveObject, замена отсутствующего в .NET 8 Marshal.GetActiveObject) - KompasSession: подключение через API5 (KompasObject) -> API7 (IApplication), attach/launch, версия/редакция, освобождение COM на STA-потоке - tests: 5 unit-тестов диспетчера + 3 интеграционных теста подключения (зелёные) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
36 lines
1.2 KiB
C#
36 lines
1.2 KiB
C#
using Kompas.Mcp.Core;
|
|
using Kompas.Mcp.Core.Threading;
|
|
|
|
namespace Kompas.Mcp.Tests.Integration;
|
|
|
|
/// <summary>
|
|
/// Общая фикстура интеграционных тестов: один STA-диспетчер и одно подключение к КОМПАС
|
|
/// на весь набор тестов коллекции (КОМПАС присоединяется/запускается единожды).
|
|
/// </summary>
|
|
public sealed class KompasFixture : IDisposable
|
|
{
|
|
public KompasDispatcher Dispatcher { get; }
|
|
public KompasSession Session { get; }
|
|
public KompasConnectionInfo Info { get; }
|
|
|
|
public KompasFixture()
|
|
{
|
|
Dispatcher = new KompasDispatcher();
|
|
Session = new KompasSession(Dispatcher);
|
|
Info = Session.ConnectAsync(visible: true).GetAwaiter().GetResult();
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
Session.Dispose();
|
|
Dispatcher.Dispose();
|
|
}
|
|
}
|
|
|
|
/// <summary>Коллекция, позволяющая делить одно подключение между классами интеграционных тестов.</summary>
|
|
[CollectionDefinition(Name)]
|
|
public sealed class KompasCollection : ICollectionFixture<KompasFixture>
|
|
{
|
|
public const string Name = "kompas";
|
|
}
|