鉴于传统应用程序有1500个spring.xmls。我想写一个服务的单元测试。我深深地依赖于地狱。我必须接受应用程序,没有出路。在纠结的春天背景下进行单元测试
所以我们使用spring-3.something和mockito-1.9,我想要测试服务的好方法。较新的代码大量使用@Autowired注释。
这个服务间接地使用了我实际上想在测试中使用的〜25个助手(工厂方法等)以及我对这个测试不感兴趣的〜25个对象。
我目前尝试以上述方式设置上下文,但我对@Mock,@InjectMocks,@Autowired的影响感到困惑。
我的测试如下。我需要帮助才能正确设置它。
问题:
- 是什么@InjectMocks的实际效果?
- 我该如何决定(技术上)哪些自动布线的豆子真的被使用,哪些被mock取代?
- 我知道,我滥用嘲讽获得假货。是否有一种更简单的方法来获得单线的假货?
- * 请注意,我想明白这一点,因为我有这样的服务... *
这里的负载是我的示例:
@ContextConfiguration(locations = {
"classpath:/some/path/MainTestConfig.spring.xml"
})
@RunWith(SpringJUnit4ClassRunner.class)
public class SampleTest {
// *** Uninteresting Dependencies to be mocked *** //
@Mock Mock1 mock1;
@Mock Mock2 mock2;
/** Service under test */
@Autowired
SomeService service;
// *** Tightly coupled helpers to be used *** //
@Autowired Helper1 helper1
@Autowired Helper2 helpr2
@Before
public void setup() {
MockitoAnnotations.initMocks(SampleTest.class);
}
@Test
public void testSample() {
// prepare dummy context
SomeContext context = new Context();
// define expected result
int expectedValue = 42;
//execute method under test, record result
Result actualResult = service.execute(context);
//make assertions on result
assertTrue(actualResult.getSomething()==expectedValue);
}
}
我不明白为什么你会有'mock1'和'mock2'这些在你的测试中似乎没有关系,因为它们是不相关的。此外,助手似乎不被使用,在测试中得到验证。如果一切都是春天连线,为什么你想要它。我相信你实际上应该嘲笑紧密耦合的帮手,并验证相互作用。最终你也可以把这个测试写成一个大功能/特性测试,即不是单元测试,也不是集成测试,因此它会被放置在其他一些软件包中以显示你的同事的不同之处。 – Brice
顺便问一下你是否尝试过Spring 3中的注释配置?如果你只需要注入一些依赖关系,这可能会很有用,并且这也可以用于mock(如果添加另一个maven依赖关系,则不需要使用springockito)。 – Brice