C# - 分配从MEF

时间:2015-07-11 20:22:59

标签: c# .net unit-testing moq mef

我正在使用 MEF 进行依赖注入,我正在编写一个单元测试,其中我必须注入一个模拟依赖项,但我已将其声明为{{1这让我无法做到。

使用{ get; protected set; }属性导入依赖项,这意味着它不会通过构造函数或类似的东西传递。

什么是正确的方法,并且“正确”我的意思是它不违反像SOLID和类似的任何原则来解决这个不方便的问题?

代码:

[Import]

1 个答案:

答案 0 :(得分:1)

除非密封了类,否则可以创建一个继承自它的类并设置受保护的属性:

public class TestClass : ClassToBeTested
{
    public TestClass(IMyDependencie mockDependency)
    {
        // Set protected property:
        MyDependency = mockDependency;
    }
}

然后在单元测试的设置中,使用模拟依赖项创建对象:

 // These will be fields in the test class.
 Mock<IMyDependencie> mockDependency = new Mock<IMyDependencie>();

 TestClass tc = new TestClass(mockDependency.Object);

另一种选择 - 如果被测试的类被密封则必须使用 - 是使用PrivateObject来设置属性,或者只是使用普通的旧反射来实现它。