簡體   English   中英

模擬使用外部類的方法嘲笑

[英]Mocking a method that uses external classes, mockito

我對mockito還是陌生的,只是想了解它是如何工作的。

我有一個要測試的方法。 該方法實例化多個類以使用其方法。

例如

methodToTest{
 class1 c1 = new class1();
 class2 c2 = new class2();
 class3 c4 = new class3();

c1.method1;
c2.method2;
c3.method3;

more logic 

...

return result
}

我知道,為了測試此方法,我需要模擬這些類。 這是否意味着我需要將其解耦並將每個類作為參數傳遞給方法? 我想避免使用使用大量參數的方法,而這些方法只有在模擬時才真正需要。

也許我錯過了一些東西。

感謝您的見解。

我這里的標准解決方案是添加一個實例化類的方法:

public ClassToTest {
    methodToTest{
        class1 c1 = newClass1();
        ...
    }

    class1 newClass1() {
        return new Class1();
    }
}

新方法是protected或為包私有的,我只是在單元測試中覆蓋它以注入模擬:

@Test
public void testFoo() {
    ClassToTest inst = new ClassToTest() {
        class1 newClass1() {
            return new Class1(); // <--- you can mock here
        }            
    };
}

不必將類的不同對象傳遞給方法,您實際上可以在創建新對象時進行模擬。 例如

Class1 class1 = Mockito.mock(Class1.class);
PowerMockito.whenNew(Class1.class).withNoArguments().thenReturn(class1);

在測試類的頂部編寫此注釋

@RunWith(PowerMockRunner.class)
@PrepareForTest({Class1.class})
public class Class1Test {

----------- some code-------
}

跟隨鏈接https://code.google.com/p/powermock/wiki/MockitoUsage13

希望這能解決您的問題。 詢問情況。

暫無
暫無

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

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