gpt4 book ai didi

java - 为什么字段注入(inject)导致类难以测试?

转载 作者:搜寻专家 更新时间:2023-11-01 03:06:32 25 4
gpt4 key购买 nike

<分区>

根据Google I/O 2009 - Big Modular Java with Guice (at 29:55)使用字段注入(inject)使测试比构造函数或 setter 注入(inject)更难。

让我们考虑 NewsService 类:

public class NewsService{

@Inject Storage storage;
@Inject Authenticator auth;

public void addNews(String data){
if(auth.authenticate()){
storage.save(data);
}
}
}

和 NewsService 的单元测试:

@RunWith(MockitoJunitRunner.class)
public class NewsServiceTest{

@Mock Storage storage;
@Mock Authenticator auth;
@InjectMocks NewsService sut; //system under test

@Test
public void addNews_ShouldCallSaveOnStorage_WhenAuthIsSucceed(){
when(auth.authenticate()).thenReturn(true);
sut.addNews("mocked data");
verify(storage).save("mocked data");
}
}

Mockito 甚至可以将模拟注入(inject)私有(private)字段。注意封装很重要,所以我使用包可见性。即使 Storage 和 Authenticator 类与 NewsService 位于不同的包中,并且它们仍然对自己的字段使用包可见性,我不关心它,因为 NewsService 不必访问 Storage 或 Authenticator 中的任何字段,因为我 mock 了他们行为。

即使我将 NewsService 更改为使用构造函数注入(inject),我的单元测试类也不会改变。

所以问题是:在保持设计良好的架构的情况下,字段注入(inject)真的会导致测试更加困难吗?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com