私が持っているクラスの単体テストを書いています。このクラスにはパブリックメソッドがあり、パブリックメソッドの内部には同じクラスのプライベートメソッドが呼び出されます。私はそれらのプライベートメソッドへの呼び出しを嘲笑したい。このクラスは次のようなものです:パブリックメソッドでPowerMock、Mockito、およびTestNGで使用されているプライベートメソッドをモックします。
public class SomeClass {
public int somePublicMethod(int num) {
int num2 = somePrivateMethod1(num);
int num3 = somePrivateMethod2(num);
return num2 + num3;
}
private int somePrivateMethod1(int num) {
return 2*num;
}
private int somePrivateMethod2(int num) {
return 3*num;
}
}
私のユニットテストでは、私はPowerMockをMockitoとTestNGで使用しようとしています。私はオンラインのいくつかの例を見てきました
FAILED: testSomePublicMethod
org.mockito.exceptions.misusing.UnfinishedStubbingException:
Unfinished stubbing detected here:
-> at org.powermock.api.mockito.internal.PowerMockitoCore.doAnswer(PowerMockitoCore.java:31)
E.g. thenReturn() may be missing.
Examples of correct stubbing:
when(mock.isOk()).thenReturn(true);
when(mock.isOk()).thenThrow(exception);
doThrow(exception).when(mock).someVoidMethod();
Hints:
1. missing thenReturn()
2. you are trying to stub a final method, you naughty developer!
が、私は避難所」:私はこのテストを実行すると、私は例外といくつかのヒントを得る
import static org.powermock.api.mockito.PowerMockito.doReturn;
import static org.powermock.api.mockito.PowerMockito.spy;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.testng.Assert;
import org.testng.annotations.Test;
@PrepareForTest(SomeClass.class)
public class SomeClassTest {
@Test
public void testSomePublicMethod() throws Exception {
int num = 4;
SomeClass someClassSpy = spy(new SomeClass());
doReturn(8).when(someClassSpy, "somePrivateMethod1", num);
doReturn(12).when(someClassSpy, "somePrivateMethod2", num);
int result = someClassSpy.somePublicMethod(num);
Assert.assertEquals(result, 20);
}
}
:ここsomePublicMethodを試験する試験での私の試みはありますPowerMockを使ってMockitoとTestNGを使用して、私が望むことを具体的に行うことができました。誰かが私に何か異なることができるかについてのいくつかの指針を私に与えることができますか?