使用外部应用程序的虚假/假对象

时间:2016-04-06 11:04:33

标签: c# unit-testing mstest microsoft-fakes shim

我上课了,我需要测试 RunMethod 。问题是,ExternalClass需要在服务器端运行一些应用程序(app提供外部dll' s)。我的开发环境有这个应用程序,但我的测试开发环境还没有。我的问题是,如何在UnitTests中填充/伪造ExternalClass以不检查应用程序是否存在(测试总是在没有该外部应用程序的情况下使用env)?这个类在测试中并不重要,但如果我执行RunMethod会自动运行。

public class MyExampleClass : ISomeInterface
{
    private static ExternalClass = new ExternalClass(string someParam);

    public object RunMethod()
    {
        /* Actuall code hear, doesn't matter */
        /* few unimportant (from the view point of tester) operation in ExternalClass (object loggin etc.) */
        return someVar;
    }
}

1 个答案:

答案 0 :(得分:2)

MsFakes为shim类生成一个名为AllInstances的属性,通过此属性可以覆盖任何实例方法的行为:

[TestMethod]
public void TestMethod1()
{
    using (ShimsContext.Create())
    {
        ShimExternalClass.AllInstances.ToString01 = () =>
        {
            return String.Empty();
        };

        Assert.IsNull(new ExternalClass().ToString());
    }
}