簡體   English   中英

測試:如何驗證方法是否被調用?

[英]Test: How to verify that a method is called?

許多Mock框架都有一個功能來驗證方法是否被調用。 但是,大多數框架都要求代碼遵循依賴注入模式。

我試圖測試的代碼不使用依賴注入模式,因此無法注入對象的模擬。

代碼:

public class TestMeClass {
    public void TransformMe() { }
}

public abstract class SomeeClass {
    public SomeMethod() {
        CallMeMethod();
    }

    private void CallMeMethod() {
        TestMeClass testMeClass = new TestMeClass();
        testMeClass.TransformMe();
    }
}

如何驗證( 單元測試 TransformMe()是否調用了TransformMe()

可以用反射來完成嗎? (語言是C#)

Jon Skeet我需要你。

如何驗證(單元測試)是否調用了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();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM