我知道每个不做任何事情的方法都不应该被测试(或者甚至不存在)。问题是,我的方法通常会做一些事情,但对于测试场景,我必须模拟它所做的事情。但我仍然想断言它将发送给外部事物的参数。
听起来比实际更复杂——检查我的代码片段以便更好地理解:
class A {
@Inject
private Mailer mailer; // Custom mailer class
public void doSomething() {
Date date = new Date(); // dynamic parameter I do not care about in the test
String parameter = "test"; // The parameter I want to test later
mailer.sendMail(parameter, date);
}
}
class ATest {
@Mock
@Produces
private Mailer mailer;
@Inject
private A classToTest;
@Test
public void testDoSomething() throws Exception {
classToTest.doSomething();
assertThat(??).isEqualTo("test"); //How can I get the value of parameter?
}
}
如您所见,我需要模拟我的电子邮件程序,这样我就不会在每次测试运行时都发送电子邮件。
parameter提升为全局变量是没有意义的。
有什么方法可以在parameter不更改代码的情况下测试值A吗?如果不是,最好的解决方案是什么,而不会为了测试而弄乱我的课程?
小唯快跑啊
慕标5832272
相关分类