小编Fre*_*son的帖子

在Mockito中,当顺序很重要时,验证两个同一方法的调用与另一个方法调用之间的调用

我认为这会奏效:

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对这些测试太有限了?

java mockito

9
推荐指数
1
解决办法
6546
查看次数

如何在不使用选择器的情况下阻止DatagramChannel中的超时处理

我觉得我错过了一些非常明显的东西.

我的系统的整体结构使我想要使用没有选择器的阻塞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 udp nio datagram

6
推荐指数
1
解决办法
1978
查看次数

现在有什么奇特的方式来支持java中的脚本?

我有一个小程序,用户可以在文本区域中输入"真正的"java代码片段,然后执行代码以执行一些简单的系统测试.这个程序是在很久以前制作的,现在我很好奇是否有一些新的奇特方法来利用java平台来实现同样的事情(例如让用户在文本区域中输入Groovy,或者可能支持多个脚本语言).当我读到java 7在其虚拟机中支持动态类型脚本时,我很好奇.

java scripting

5
推荐指数
1
解决办法
420
查看次数

除了 javafx.beans.property 提供的机制之外,我是否应该在非 GUI 应用程序逻辑中使用其他内容?

过去,我不止一次实现了与 JavaFX 提供的类似的属性和侦听器。

由于我总是更喜欢使用广泛支持的包而不是我自己发明的东西,所以我很想在下一个项目中使用 JavaFX 属性,但在此之前,我想得到以下问题的答案。

在与 GUI 无关但会受益于更改侦听器以监视和控制系统状态的软件中,我是否仍然应该选择 JavaFX 提供的属性机制,或者是否有其他可用的东西适合我?...或者我还需要自己实现这个机制吗?

问候,弗雷德里克

java properties observable changelistener javafx-2

5
推荐指数
1
解决办法
297
查看次数

如何正确模拟自动关闭资源?

我正在尝试为此编写单元测试:

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 mockito

5
推荐指数
1
解决办法
2120
查看次数