如何模拟 Microsoft.Deployment.WindowsInstaller 会话

use*_*187 5 c# windows-installer unit-testing custom-action wix

我正在使用 C#。我创建了一个 Wix 安装程序和一个自定义操作来支持 wix 安装程序。现在我正在尝试创建一个仅对 CustomAction 进行单元测试,而没有 LUX。

我尝试了许多不同的方式,但我无法模拟 Microsoft.Deployment.WindowsInstaller 会话。任何想法或指针。我正在使用最小起订量。

Nic*_*ate 2

它并不漂亮,但我为会话创建了一个简单的包装器。就像是:

public class MockSession
{
    private readonly Session _session = null;
    private readonly Dictionary<string, string> _properties;

    public MockSession()
    {
        _properties = new Dictionary<string, string>();
    }

    public MockSession(Session session)
    {
        _session = session;
    }

    public string this[string property]
    {
        get
        {
            if (_session)
                return _session[property];
            else
                return _properties[property];
        }
        set
        {
            if (_session)
                _session[property] = value;
            else
                _properties[property] = value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

每个 CustomAction 方法都是一个包装会话的存根:

[CustomAction]
public static ActionResult Method(Session session)
{
    var mockSession = new MockSession(session);
    return MethodMock(mockSession);
}

public static ActionResult MethodMock(MockSession session)
{
    // ... The real work here is testable
}
Run Code Online (Sandbox Code Playgroud)

不理想,但在紧要关头它可以工作。