我的方法的JUnit测试

时间:2018-07-13 18:49:14

标签: java unit-testing junit

您好,我需要为我的方法编写单元测试。我遇到了一些麻烦,因为我是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);
}

2 个答案:

答案 0 :(得分:3)

在您的情况下,这只是单元测试,您无需使用@MockBean,因为它会加载上下文。使用@MockBean可以使单元测试运行得更快,它将加载上下文并花费时间来完成测试。 Here是何时使用@Mock以及何时使用@MockBean的建议。

正如Maxim所说,测试中没有断言。这就是测试没有失败的原因。

编写测试时要记住的几件事。

  • 测试被认为是代码的文档,应该以使他人理解代码的方式更具可读性。
  • 如前所述,单元测试用于提供更快的反馈
  • 在测试中具有AAA(排列,执行,声明)结构。更多信息here

代码如下:

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
    }