C#方法的多个Stub实现用T

时间:2017-10-27 13:31:18

标签: c# unit-testing mstest

目前我有一个工厂类,我有方法使用反射实例化不同的类并返回所有类实现的基接口。代码工作正常。但当我转向在类上编写单元测试(ms-test)时,当我尝试实例化多个类时,我遇到了问题

工厂类:

public class BusinessFactory : IBusinessFactory
{
        public BusinessFactory()
        {
        }

        public IBaseBusiness Create<T>() where T : class
        {
            return (IBaseBusiness) Activator.CreateInstance(typeof(T));
        }
}

单元测试:

我试图将IBusinessFactory存根并注入我测试的类中,这样我就可以伪造该类使用的实现。

示例:未能完成TestInit方法,并且在实例化class2的存根时失败。

interface IClass1 : IBaseBusiness{}

public Class1 : IClass1{}

interface IClass2 : IBaseBusiness{}

public Class2 : IClass2{}

public TestFactory{

[TestInitialize]
public void TestInit()
{
    var fkBusFac = new StubIBusinessFactory();

    fkBusFac.CreateOf1<Class1>(() => new StubIClass1() { });
    fkBusFac.CreateOf1<Class2>(() => new StubIClass2() { });
}

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

不是你问题的答案,但......

如果我执行以下操作会发生什么?:

var business = Create<string>();

这里绝对没有类型安全。如果创建的对象实现IBaseBusiness,请确保它,并且只需调用new()(哦,如果它是一个工厂方法,你不应该让它静止吗?):

public static IBaseBusiness Create<T>() where T : IBaseBunsiness, new()
{
    return new T();
}