2012-01-27 115 views
2

我正在使用Java 6與JUnit 4.8.1(和Maven 3.0.3)。對於某些JUnit測試,我想用我自己的版本的類(具有相同的公共方法簽名)來代替一類的一些測試依賴於(合格的com.myco.clearing.product.server.cache) 。什麼是一個優雅的方式來做到這一點?如何在運行某些JUnit測試時替換某個類?

注意一些JUnit測試的不直接調用com.myco.clearing.product.server.cache.Cache類,而是調用,依賴於這個類的類。即使在這些間接情況下,我也希望使用我的課程版本。

感謝沿着這些線路的任何幫助, - 戴夫

+0

等待,是你_tests_依賴於緩存?或者被測試的單元是依賴於Cache的單元? (我知道Cache只是一個例子) – 2012-01-27 20:35:53

回答

2

這是很難說究竟在這裏做什麼,但一般:

  1. 使用一些IoC的技術 - 構造器,二傳注射。

  2. 使用模擬框架來模擬你的對象,我會推薦 Mockito。

因此,舉例來說,如果你有一個使用com.myco.clearing.product.server.cache.Cache讓一類我們稱之爲Foo。而你現在使用的是這樣的:

class Foo { 
private Cache _cache = new Cache(...); 
} 

如果可能的話,將其更改爲這樣的事情:

class Foo { 
    private Cache _cache; 

    public Foo(Cache cache) { 
     _cache = cache; 
    } 

    public Foo() { 
     this(new Cache()); 
    } 
} 

然後你可以在Cache類的嘲笑版本注入。我說「可能會」,因爲它取決於類別Cache。如果它是最終的,有一堆靜態方法等,那麼你有更多的處理。

相關問題