gpt4 book ai didi

java - 测试不会改变测试场景中任何内容的 void 方法

转载 作者:行者123 更新时间:2023-11-30 01:50:13 25 4
gpt4 key购买 nike

我知道每个不做任何事情的方法都不应该被测试(或者甚至不存在)。问题是,我的方法正常执行某些操作,但对于测试场景,我必须模拟它所做的事情。但我仍然想断言它将发送到外部事物的参数。

听起来比实际更复杂 - 检查我的代码片段以更好地理解:

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?
}
}

如您所见,我需要模拟我的电子邮件发送器,这样我就不会在每次测试运行时都发送电子邮件。

参数提升为全局变量是没有意义的。

有没有办法在不改变A的代码的情况下测试parameter的值?如果不是,最好的解决方案是什么,而不会为了测试而扰乱我的类(class)?

最佳答案

您需要使用Mockito.verify:

verify(mailer, times(1)).sendMail("test");

Verify 检查您的模拟发生了什么:调用一个方法多少次,以及为该方法提供了哪些参数。

<小时/>

更新:如果您想排除某些参数,可以使用 org.mockito.Matchers.any - 更容易将其作为静态导入。 (注意:如果您确实忽略了某些参数,那么您现在想要包含的参数必须包含在 org.mockito.Matchers.eq 中)。

verify(mailer, times(1)).sendMail(eq("test"), any(Date.class));

关于java - 测试不会改变测试场景中任何内容的 void 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56340514/

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