许多Mock框架都有一个功能来验证方法是否被调用。但是,大多数框架都要求代码遵循依赖注入模式。
我试图测试的代码不使用依赖注入模式,因此无法注入对象的模拟。
代码例:
public class TestMeClass {
public void TransformMe() { }
}
public abstract class SomeeClass {
public SomeMethod() {
CallMeMethod();
}
private void CallMeMethod() {
TestMeClass testMeClass = new TestMeClass();
testMeClass.TransformMe();
}
}
如何验证{单元测试)是否调用了TransformMe()
?
可以使用反射来完成吗? (语言是C#)
Jon Skeet我需要你。
答案 0 :(得分:3)
如何验证(单元测试)是否调用了TransformMe()?
没有。并非没有公开可以验证的公开信息。
非常糟糕的例子只是为了说明一点。
public abstract class SomeeClass{
public SomeMethod(){
CallMeMethod();
}
public bool TransformMeCalled {get;private set;}
private void CallMeMethod() {
TestMeClass testMeClass = new TestMeClass();
testMeClass.TransformMe();
TransformMeCalled = true;
}
}
可以使用反射来完成吗? (语言是C#)
再次编号。依赖项是在依赖类中内部创建的,外部参与者不知道。外部访问点需要可用,否则这是不可测试的。当你说
时你回答了这个问题我试图测试的代码不使用依赖注入 模式,因此无法注入对象的模拟。
一个选项是重构依赖项的创建,这将允许覆盖它,但同样,它必须暴露给外部参与者才能被访问
public abstract class SomeeClass{
public SomeMethod(){
CallMeMethod();
}
public abstract TestMeClass CreateTestMeClass();
private void CallMeMethod() {
TestMeClass testMeClass = CreateTestMeClass();
testMeClass.TransformMe();
}
}