A
是来自引用的dll的类,因此无法更改。它有一个方法Foo()
,在我的DoFoo()
方法中调用(以A
作为参数)。我想在不执行DoFoo()
的情况下测试Foo()
,因为它价格昂贵且已经过测试。
在这种情况下,最佳做法是什么?
我对此的看法:
A
创建一个包装类,并将其传递给DoFoo()
。包装类区分真实和虚假实现。dynamic
并传入一个虚假的类,其中包含空DoFoo()
实现。答案 0 :(得分:4)
创建一个包含要公开的方法的界面。
创建一个实现该接口的包装类,它使用外部程序集的类来完成它的工作。您可以创建此接口的其他实现,如模拟实现。
将构造函数注入的接口注入到需要该功能的类中。
在测试中,您可以轻松地将使用外部库的实现替换为模拟实现。
答案 1 :(得分:1)
实际上使用Typemock非常容易,你不需要使用包装器或创建接口,你可以嘲笑它。例如:
待测方法:
public string DoFoo(A a)
{
string result = a.Foo();
return result;
}
}
sealed public class A
{
public string Foo()
{
throw new NotImplementedException();
}
}
测试:
[TestMethod,Isolated]
public void TestMethod1()
{
var a = Isolate.Fake.Instance<A>(Members.CallOriginal);
Isolate.WhenCalled(() => a.Foo()).WillReturn("TestWorked");
var classUnderTest = new Class1();
var result = classUnderTest.DoFoo(a);
Assert.AreEqual("TestWorked", result);
}