2011-08-31 25 views
1

我們的團隊的成員正在加緊進行單元測試,並且我們正在努力應用一些術語。我想確定一個特定模式的名稱。我希望有一個已經被其他開發人員所接受,但如果不是,我想提出一個描述性的,並且會讓測試策略更容易討論。你稱之爲用於測試的內部類是什麼?

此模式用於測試抽象方法的相當多,但在對象創建新對象時(對於DI不起作用或不需要的情況)也很方便。基本模式是使用擴展受測試類的內部類來公開受保護的方法。

考慮下面的代碼(這是僞代碼,基於Java,而應該轉化爲大多數語言):

要測試的類:

public class MyClass { 
    public void send() { 
    //do something 
    } 
    protected MailMessage createNewMailMessage() { 
    return new MailMessage(); 
    } 
} 

測試:

public class MyClassTest { 
    private MyClass myClass = new TestableMyClass(); 
    private MailMessage mockMessage = mock(MailMessage.class); 

    public void setup() { 
    ((TestableMyClass)myClass).setMailMessage(mockMessage); 
    } 

    // Do some tests // 

    private class TestableMyClass extends MyClass { 
    private MailMessage mailMessage; 

    public void setMailMessage(MailMessage mailMessage) { 
     this.mailMessage = mailMessage; 
    } 

    protected MailMessage createNewMailMessage() { 
     return mailMessage; 
    } 
    } 
} 

那麼,你稱這種模式是什麼? TestableMyClass是一個「模擬」對象,但由於它不是由模擬框架管理的,所以似乎應該有另一個術語來描述這種模式。任何建議或想法?

+0

我所能所有'TestableMyClass'本着存根[1] [1] [這]:HTTP:/ /stackoverflow.com/questions/463707/what-are-the-differences-between-mocks-and-stubs-on-rhino-mocks – hvgotcodes

回答

0

我會稱它爲存根。正如你所說,這不是一個真正的「模擬」,因爲它的行爲不是由嘲弄框架控制,而是一個「真實」的對象。

0

你不需要使用一個模擬框架來調用某個模擬/存根對象 - 你的MyClassTest(我假設應該擴展MyClass)只是一個存根。

我不認爲在Mocks/Stub被定義爲測試類的內部類的情況下有一個特定的名稱 - 在這裏的特定示例中,沒有理由將它作爲內部類 - 它可以只是一個封裝保護類(在與MyClassTest相同的文件或在其單獨的文件..)

0

模擬包含測試斷言。

存根提供簡單的硬編碼值使測試工作。

提供複雜的行爲/答案。

我通常會在內部類的前面加上兩個下劃線作爲測試的前綴,所以它不會顯示在自動完成中,例如, '__TestableMyClass'。此外,如果你正在使用你的Mockito應磕碰像這樣

MyClass myClass = mock(MyClass.class); 
when(myClass.createNewMailMessage()).thenReturn(mockMessage); 
相關問題