[英]Replace implementation of a “sealed” class
A
是来自引用的dll的类,因此无法更改。 它有一个方法Foo()
,该方法在我的DoFoo()
方法内部被调用(以A
作为参数)。 我想在不执行Foo()
DoFoo()
情况下测试DoFoo()
,因为它很昂贵并且已经过测试。
在这种情况下,最佳做法是什么?
我对此的想法:
A
周围创建包装器类,并将其传递到DoFoo()
。 包装器类区分真实的和假的实现。 dynamic
并通过一个空的DoFoo()
实现传递一个伪类。 创建一个包含要公开的方法的接口。
创建一个实现该接口并使用外部程序集的类完成其工作的包装器类。 您可以创建此接口的其他实现,例如模拟实现。
例如,将带有构造函数注入的接口注入需要功能的类中。
在测试中,您可以轻松地将使用外部库的实现替换为模拟实现。
实际上,使用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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.