使用 Mockito Junit 测试模拟内部方法

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

我真的迷失了我的错误,我看了很多文档,却找不到我的错误。

我正在测试一个方法服务,里面有一个类和方法:

@Service
public class myServiceImpl implements myService {
    public void myMethod(MyObject myObject) throws Exception {
         Object2 object2 = new Object2(myObject) // just some mapping and properties
         MyClass myClass = new MyClass();
         myClass.doStuff(object2); // this is a void method
    }
}

所以我的测试是这样的:

@RunWith(PowerMockRunner.class)
@PowerMockIgnore({"javax.managenemt.*"}
public class MyServiceImplTest{
   @InjectMocks
   private MyServiceImpl myService;

  @Test
  public void myMethodTest() throws Exception {
    MyClass myClass = mock(MyClass.class);
    doNothing().when(myClass).doStuff(any());

    MyObject myObject = //get from mock file, it works
    myService.myMethod(myObject);
  }
}

测试崩溃是因为它调用了 doStuff 方法,所以我的模拟不工作。

我做错了什么?

junit mockito powermockito
1个回答
0
投票

可能的原因是使用了powermockito。 PowerMockito 用于模拟静态方法、最终类和其他高级场景。在你的情况下似乎没有必要。 mockito 的测试应该是这样的:

    @ExtendWith(MockitoExtension.class)
    public class MyServiceImplTest {

    @Mock
    private MyClass myClass;

    private MyServiceImpl myService;

    @BeforeEach
    public void setUp() {
        myService = new MyServiceImpl(myClass);
    }

    @Test
    public void myMethodTest() throws Exception {
        MyObject myObject = // get from mock file, it works

        Mockito.lenient().doNothing().when(myClass).doStuff(any());

        myService.myMethod(myObject);

        // Add assertions or verifications if needed
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.