服务内部的测试方法

时间:2019-09-11 13:00:22

标签: java testing junit service

我正在以MVCS结构构建Web应用程序。

我在Service类中获得了所有带有逻辑的方法。

我如何使用junit对其进行测试?可以给我解释一下它如何工作吗?还是提供课程/文章?我尝试了很多资源,但没有一个能解决我的问题。

我也很愿意提出建议,也许我的设计在这里很糟糕...

当我使方法成为公共静态方法时,它可以工作,但是我不确定是否应该是这种情况。

当我尝试@Autowire服务字段时,我收到NullPointerException:(

@Service
public class MapValueServiceImpl implements MapValueService {

    methodThatDoesSomething() {
    }
}
class MapValueServiceImplTest {

    @Test
    public void TestingMethodThatDoesSomething() {
      assertEquals(Something, methodThatDoesSomething())
    }
}

谢谢!

2 个答案:

答案 0 :(得分:0)

对于测试MVC,我可以从Spring向您推荐本教程

https://spring.io/guides/gs/testing-web/

您可以在此站点上查看其他教程。希望对您有帮助。

答案 1 :(得分:0)

请考虑以下示例服务:

@Service
public class MapValueServiceImpl implements MapValueService {

    @Autowired private GreetingService greetingService;

    String getGreeting(String name) {
        return greetingService.buildGreeting(name);
    }
}

如果引入了模仿(假设您正在使用Maven):

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-all</artifactId>
    <version>1.9.5</version>
    <scope>test</scope>
</dependency>

然后您可以执行以下操作...

@RunWith(MockitoJUnitRunner.class)
public class MapValueServiceImplTest {

    @Mock private GreetingService greetingService; // <-- define your mocks
    @InjectMocks private MapValueServiceImpl toTest; // <-- your mocks will be injected

    // Now you can test dependency interaction...

    @Test
    public void whenNamePassedThenCorrectGreetingReturned() { 
        // Arrange
        final String name = "George";
        final String greeting = "Hello " + name;
        doReturn(greeting).when(greetingService).buildGreeting(name);

        // Act
        final String result = toTest.getGreeting(name);

        // Assert
        assertThat(result, is(greeting));
    }

}

这是一个纯单元测试(不需要Spring上下文)。您可以在此处找到有关Mockito的更多信息:https://site.mockito.org/