我正在尝试测试服务类,该服务类在内部使用Spring
AMQP连接对象。这个连接对象是由Spring注入的。但是,我不希望单元测试实际上与AMQP代理进行通信,因此我正在使用Mockito注入连接对象的模拟。
/**
* The real service class being tested. Has an injected dependency.
*/
public class UserService {
@Autowired
private AmqpTemplate amqpTemplate;
public final String doSomething(final String inputString) {
final String requestId = UUID.randomUUID().toString();
final Message message = ...;
amqpTemplate.send(requestId, message);
return requestId;
}
}
/**
* Unit test
*/
public class UserServiceTest {
/** This is the class whose real code I want to test */
@InjectMocks
private UserService userService;
/** This is a dependency of the real class, that I wish to override with a mock */
@Mock
private AmqpTemplate amqpTemplateMock;
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testDoSomething() {
doNothing().when(amqpTemplateMock).send(anyString(), any(Message.class));
// Call the real service class method, which internally will make
// use of the mock (I've verified that this works right).
userService.doSomething(...);
// Okay, now I need to verify that UUID string returned by
// "userService.doSomething(...) matches the argument that method
// internally passed to "amqpTemplateMock.send(...)". Up here
// at the unit test level, how can I capture the arguments passed
// to that inject mock for comparison?
//
// Since the value being compared is a UUID string created
// internally within "userService", I cannot just verify against
// a fixed expected value. The UUID will by definition always be
// unique.
}
}
希望此代码示例中的注释清楚地提出问题。当Mockito将模拟依赖项注入到真实类中,并且在真实类上进行单元测试导致它html" target="_blank">调用该模拟对象时,您以后如何才能检索传递给注入的模拟对象的确切参数?
使用一个或多个ArgumentCaptor
。
目前尚不清楚您的类型在这里,但无论如何。假设您有一个包含doSomething()
将a Foo
作为参数的方法的模拟,然后执行此操作:
final ArgumentCaptor<Foo> captor = ArgumentCaptor.forClass(Foo.class);
verify(mock).doSomething(captor.capture());
final Foo argument = captor.getValue();
// Test the argument
而且,看起来您的方法返回了void,并且您不希望它做任何事情。只需写下:
doNothing().when(theMock).doSomething(any());
我试图测试一个服务类,它在内部使用Spring AMQP连接对象。此连接对象由Spring注入。然而,我不希望我的单元测试实际与AMQP代理通信,所以我使用Mockito注入连接对象的mock。 希望这段代码示例中的注释清楚地阐述了这个问题。当Mockito将模拟依赖项注入到真实类中,并且对真实类的单元测试导致它调用模拟时,您以后如何检索传递给注入的模拟的确切参数?
问题内容: 假设我有一个这样的课: 我想用模拟测试。因此,我创建了一个模拟对象,然后以这种方式调用方法进行测试: 但是,假设我有一个类似的类: 现在我无法将模拟作为参数传递,那么我该如何测试我的方法呢?有人可以举个例子吗? 问题答案: 从根本上讲,您正在尝试用替代实现替换私有字段,这意味着您违反了封装。您唯一的其他选择是重组类或方法,以使其更好地设计用于测试。 评论中有很多简短的答案,因此我在这里
问题内容: 我只是从Groovy开始。我在任何地方都找不到如何处理Groovy脚本参数的示例,因此我自己修改了此方法。必须有更好的方法来做到这一点?如果是这样,我正在寻找这种更好的方法,因为我可能忽略了显而易见的方法。 问题答案: 如果您想要的不仅仅是进阶参数解析,还可以使用Groovy CliBuilder来帮助您。它可以帮助您使用命令行标志,可选参数和打印用法说明。 签出CliBuilder的
标题可能有点混乱或误导,但我试图比较一个字符串: 然后尝试将其与arraylist中包含的每个字符串进行比较 我得到了一个类,唯一重要的是“搜索”方法。 如果您没有注意到,此方法会接收对象的arraylist作为参数。现在的问题是
问题内容: 我正在尝试在RMI方法中添加参数。当我添加例如一切正常。但是我不确定是否可以传递我创建的对象。我是RMI的新手,所以我的代码非常简单: HelloIF 你好 RMI服务器 RMI客户端 最后是我的课堂上下文 我应该怎么做才能使传递上下文成为可能? 问题答案: 您的对象应实现。如我所见,这将是一个问题。之所以需要这样做是因为两个部分之间的通信是使用序列化完成的,因此需要发送给另一部分的每
问题内容: 在java中,可以获取调用当前方法的类和方法(在其中获得StackTrace的方法)。 我的问题是,我可以获取传递给调用此方法的方法的参数吗? 我需要此来进行调试。 例如: 可以从堆栈跟踪中获取此信息,还是有其他方法? (请注意,我需要能够在运行时执行此操作,并且实际上不能更改baseClass的源,这将成为我的调试类的功能,该类事先不知道源) 谢谢。 问题答案: 我认为使用标准Jav