7

我有两个测试类,MyFirstTest 和 MySecondTest。独立运行每个都可以正常工作。当我同时运行两者时(在 Eclipse 中选择包含这些文件的测试文件夹,右键单击,以 junit 运行),MySecondTest 失败,因为 MyClass 在运行它的测试时仍然被模拟。MyFirstTest 要求 MyClass 被模拟。MySecondTest 要求 MyClass 不被嘲笑。我认为tearDownMocks 是为了“模拟”课程。

public class MyFirstTest {
    @Before
    public void setUp() throws Exception {
        Mockit.setUpMocks(MockMyClass.class);
    }
    @After
    public void tearDown() throws Exception {
        Mockit.tearDownMocks(MockMyClass.class);
    }
    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        Mockit.tearDownMocks(MockMyClass.class);
    }
    @MockClass(realClass = MyClass.class, stubs = "<clinit>")
    public static class MockMyClass {
...


public class MySecondTest {
4

2 回答 2

3

正确的方法如下所述:模拟类并将其分配给变量。然后,使用该变量,您可以销毁或清除模拟,使其不会影响任何其他测试用例。

MockUp<PmRequestData> mockpmreq = new MockUp<PmRequestData>() {
        @Mock
        public Map<String, KPIData> getKpiDataMap() {
            return datamap;
            }
        };
mockpmreq.tearDown();
于 2017-09-22T09:23:41.193 回答
2

Mockit.tearDownMocks()方法接受真正的类而不是模拟。所以,正确的代码是:

Mockit.tearDownMocks(MyClass.class);
于 2012-11-28T15:22:01.960 回答