测试:如何验证方法是否被调用?

时间:2016-11-24 15:37:48

标签: c# unit-testing testing mocking

许多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我需要你。

1 个答案:

答案 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();
    }
}