【问题标题】:how to mock Microsoft.Deployment.WindowsInstaller Session如何模拟 Microsoft.Deployment.WindowsInstaller 会话
【发布时间】:2019-03-21 15:46:04
【问题描述】:

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

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

【问题讨论】:

  • 如果没有 LUX,您是否知道这一点?还是你问是否可能?
  • 嗨,很抱歉挖掘了一个老话题,但我有同样的问题。你终于找到解决问题的方法了吗?谢谢
  • @Morgane:我添加了一个明显的答案。如果您发现更好的东西,请告诉我。
  • @NickWestgate 非常感谢!这将非常有帮助:)

标签: c# unit-testing wix windows-installer custom-action


【解决方案1】:

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

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;
        }
    }
}

每个 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
}

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

【讨论】:

    猜你喜欢
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    相关资源
    最近更新 更多