您好,我需要为我的方法编写单元测试。我遇到了一些麻烦,因为我是JUnit的新手。我需要为此方法编写测试。 这是我的方法
@Override
public Long countSellingOrdersInQueue(String principal) {
List<String> states = Arrays.asList(PENDING.name(), REGULARIZED.name());
return orderRepository.countByArticleUserIdAndStateIn(principal, states);
}
我尝试过,但被阻止了,这是我的结果
P.S。测试通过了,但我不知道测试是否正确
@MockBean
private OrderRepository orderRepository;
private String principal ;
@Test
public void countSellingOrdersInQueueTest(){
orderService.countSellingOrdersInQueue(principal);
List<String> states = Arrays.asList(PENDING.name(), REGULARIZED.name());
orderRepository.countByUserIdAndStateIn(principal,states);
}
答案 0 :(得分:3)
在您的情况下,这只是单元测试,您无需使用@MockBean,因为它会加载上下文。使用@MockBean可以使单元测试运行得更快,它将加载上下文并花费时间来完成测试。 Here是何时使用@Mock以及何时使用@MockBean的建议。
正如Maxim所说,测试中没有断言。这就是测试没有失败的原因。
编写测试时要记住的几件事。
代码如下:
public class OrderServiceTest {
@InjectMocks
private OrderService orderService;
@Mock
private OrderRepository orderRepository;
@Before
public void setUp() throws Exception {
initMocks(this);
}
@Test
public void countSellingOrdersInQueueTest(){
when(orderRepository.countByArticleUserIdAndStateIn(any(), any())).thenReturn(1L);
String principal = "dummyString";
Long actualCount = orderService.countSellingOrdersInQueue(principal);
List<String> expectedStates = Arrays.asList("State 1", "State 2");
assertThat(actualCount, is(1L));
verify(orderRepository).countByArticleUserIdAndStateIn(principal, expectedStates);
}
}
答案 1 :(得分:2)
测试通过,因为您没有任何断言可检查结果。您只需调用无例外执行的方法即可。
简单的测试示例:
@Test
public void test() {
assertEquals(true, true);
}
在您的情况下,测试看起来像:
@Test
public void countSellingOrdersInQueueTest(){
orderService.countSellingOrdersInQueue(principal);
List<String> states = Arrays.asList(PENDING.name(), REGULARIZED.name());
orderRepository.countByUserIdAndStateIn(principal,states);
assertEquals(10, orderRepository.countByUserIdAndStateIn(principal,states));//10 replace to expectetion count
//add some more checks
}