我是java测试的新手,已经有点运气了,没有运气,我有以下课程:
public class Bar {
public Object doSomething(int a, String b){
return "something";
}
public Object doSomethingElse(int a, int b, String c){
return "something else";
}
}
public class Foo {
private static Bar bar = new Bar();
public static void start(int a, int b, String c){
if(a == 1) { // some calculated condition
bar.doSomething(a, c);
} else {
bar.doSomethingElse(a, b, c);
}
}
}
@RunWith(PowerMockRunner.class)
@PrepareForTest(Foo.class)
public class FooTest {
@Test
public void somethingTest() throws Exception {
Bar barMock = createMock(Bar.class);
expectNew(Bar.class).andReturn(barMock);
expect(barMock.doSomething(1, "xxx")).andReturn("ABC");
replay(barMock, Bar.class);
Foo.start(1, 2, "xxx");
verify(barMock, Bar.class);
}
@Test
public void somethingElseTest() throws Exception {
Bar barMock = createMock(Bar.class);
expectNew(Bar.class).andReturn(barMock);
expect(barMock.doSomethingElse(0, 2,"xxx")).andReturn("ABC");
replay(barMock, Bar.class);
Foo.start(0, 2, "xxx");
verify(barMock, Bar.class);
}
}
运行测试单独起作用,但不是整个类,我认为这与以下问题有关:
private static Bar bar = new Bar();
但是我不确定100%。无论哪种方式,假设我不能更改foo / bar类,如何解决此问题?
我将Foo重构为: