我认为这会奏效:
InOrder inOrder = new InOrder(mock);
inOrder.verify(mock).method1();
inOrder.verify(mock).method2();
inOrder.verify(mock).method1();
Run Code Online (Sandbox Code Playgroud)
......但是Mockito说undesired invocation of mock.method1(). Wanted 1 time, but was 2 times.我把我的代码更改为:
inOrder.verify(times(2), mock).method1();
inOrder.verify(mock).method2();
Run Code Online (Sandbox Code Playgroud)
它应该工作,但现在我不测试我想要测试的东西.有人可以指出我做错了什么,或者如果Mockito对这些测试太有限了?
我觉得我错过了一些非常明显的东西.
我的系统的整体结构使我想要使用没有选择器的阻塞DatagramChannel,以保持简单.我试图通过在套接字上设置超时来实现超时处理,但这似乎没有任何效果.
这个伪代码给出了我想要实现的内容的提示.
DatagramChannel channel = DatagramChannel.open(); channel.socket().bind(some address); channel.socket().setSoTimeout(3000); channel.send(outBuffer, peerAddress); channel.receive(inBuffer);
另一方面,我有一个UDP服务器,它提供五个快速响应,然后,为了测试目的,在传递第六个响应之前延迟大约五秒钟.
延迟不会触发SocketTimeoutException.这是为什么?调用channel.receive时,似乎没有考虑套接字上设置的超时.
此致Fredrik
我有一个小程序,用户可以在文本区域中输入"真正的"java代码片段,然后执行代码以执行一些简单的系统测试.这个程序是在很久以前制作的,现在我很好奇是否有一些新的奇特方法来利用java平台来实现同样的事情(例如让用户在文本区域中输入Groovy,或者可能支持多个脚本语言).当我读到java 7在其虚拟机中支持动态类型脚本时,我很好奇.
过去,我不止一次实现了与 JavaFX 提供的类似的属性和侦听器。
由于我总是更喜欢使用广泛支持的包而不是我自己发明的东西,所以我很想在下一个项目中使用 JavaFX 属性,但在此之前,我想得到以下问题的答案。
在与 GUI 无关但会受益于更改侦听器以监视和控制系统状态的软件中,我是否仍然应该选择 JavaFX 提供的属性机制,或者是否有其他可用的东西适合我?...或者我还需要自己实现这个机制吗?
问候,弗雷德里克
我正在尝试为此编写单元测试:
try (final DatagramChannel channel = helper.createChannel()) {
...
}
Run Code Online (Sandbox Code Playgroud)
在我的测试中,我模拟了帮助器(使用Mockito),并告诉helper.createChannel()返回一个模拟通道.
此测试失败了
java.lang.NullPointerException
at java.nio.channels.spi.AbstractInterruptibleChannel.close(AbstractInterruptibleChannel.java:111)
Run Code Online (Sandbox Code Playgroud)
我知道Java中的try-with-resources工具在退出try块时调用DatagramChannel中的close()方法,但是不应该调用模拟的DatagramChannel中的close()方法吗?
调试器告诉我AbstractInterruptibleChannel中的closeLock为null.
我应该继承DatagramChannel,重写其中的close()方法,然后模拟我的子类吗?或者,我是否以更深刻的方式做错了(帮助器模拟返回模拟)?
此致Fredrik Israelsson
测试代码,根据要求:
@Mock
private InetAddress peerAddress;
@Mock
private UDPChannelHelper helper;
@Mock
private DatagramChannel channel;
private UDPTransportImpl transport;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
when(helper.createChannel()).thenReturn(channel);
transport = new UDPTransportImpl(peerAddress, 0, helper);
}
@Test
public void testNormalSubmit() throws Exception {
transport.submit("Hello");
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我没有为channel.close()指定任何行为.我相信我不应该,因为close()返回void.
java ×5
mockito ×2
datagram ×1
javafx-2 ×1
nio ×1
observable ×1
properties ×1
scripting ×1
udp ×1