Java-用于多个测试的模拟专用静态构造函数

问题描述 投票:0回答:1

我是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类,如何解决此问题?

java junit mockito powermockito
1个回答
0
投票

我将Foo重构为:

© www.soinside.com 2019 - 2024. All rights reserved.