最好在Spring测试类中使用@Autowired或new?

Mad*_*lzz 5 java junit spring

我在为我的弹簧应用程序编写单元测试时遇到了一些麻烦,我想知道这个问题.

我们来看下面的例子:

@SpringBootTest
@RunWith(SpringRunner.class)
public class AlbumDTOConverterTest {

    @Autowired
    private AlbumDTOConverter albumDTOConverter;

    @Test
    public void ToEntity_ReturnValue_NotNull() {
        AlbumDTO albumDTO = new AlbumDTO("Summer album", new Date(), "This summer, we have made some wonderfull photos. Have a look!", null);
        assertNotNull(albumDTOConverter.toEntity(albumDTO));
    }
}
Run Code Online (Sandbox Code Playgroud)

为了使@Autowired工作正常,我正在启动一个带有注释测试类的容器@SpringBootTest.

问题是我认为我做错了.在我看来,我宁愿只使用运算符而不是使用Spring的IoD来创建一个新instance的.AlbumDTOConverternew

你们怎么看待这件事?

Dan*_*ski 5

对于单元测试,您不需要启动整个容器。根据定义,此类单元应单独进行测试。使用new关键字创建类的实例是完全没问题的。即使该类依赖于其他类,您也可以手动创建它们并传递给该类的适当构造函数。

请注意,单位与班级不同。该单元的术语在开发人员中,尤其是初学者中,经常被混淆。您不必依赖单元测试中的依赖项注入。容器只会增加执行测试所需的时间,而较长的执行时间是开发人员避免经常运行测试的主要原因。为被测单元手动构建依赖关系树并没有什么问题。

从长远来看,为不同的测试创建类似的输入可能会导致测试代码重复,但幸运的是,有解决此问题的最佳实践,例如共享固定装置