gpt4 book ai didi

java - 模拟 Socket.getOutputStream() 用于测试 Java

转载 作者:行者123 更新时间:2023-12-02 10:06:37 25 4
gpt4 key购买 nike

我有一段代码想要测试 -

 ServerHello connect(
int version, Collection<Integer> cipherSuites)
{
Socket s = null;
try {

if(proxy!=null) {
s = new Socket(proxy);
}else {
s = new Socket();
}
try {
s.connect(isa);

} catch (IOException ioe) {
System.err.println("could not connect to "
+ isa + ": " + ioe.toString());
return null;
}
byte[] ch = makeClientHello(version, cipherSuites);
OutputRecord orec = new OutputRecord(
s.getOutputStream());
orec.setType(Constants.HANDSHAKE);
orec.setVersion(version);
orec.write(ch);
orec.flush();
ServerHello x = new ServerHello(s.getInputStream());
return x;
} catch (IOException ioe) {
} finally {
try {
s.close();
} catch (IOException ioe) {
// ignored
}
}
return null;
}

我想用我自己的数据模拟 this.socket.getInputStream()this.socket.getOutputStream() 数据。我该如何设置这些数据?

而且,我想确保 this.socket.connect() 通过任何测试,而不会在我的测试(离线测试)中引发任何异常。

我该怎么做?我使用 Mockito 框架进行测试

最佳答案

这相当简单,您只需要模拟您的套接字并以返回您自己的流并捕获写入数据的方式路由您的模拟方法:

@RunWith(MockitoJUnitRunner.class)
public class MyTest
{
@Mock
private Socket socket;

@Mock
private OutputStream myOutputStream;

@Captor
private ArgumentCaptor<byte[]> valueCapture;

@Test
public void test01()
{
Mockito.when(socket.getOutputStream()).thenReturn(myOutputStream);

//EXECUTE YOUR TEST LOGIC HERE

Mockito.verify(myOutputStream).write(valueCapture.capture());
byte[] writtenData = valueCapture.getValue();
}

}

我建议做一些教程,例如:https://www.baeldung.com/mockito-annotations或者也许https://examples.javacodegeeks.com/core-java/mockito/mockito-tutorial-beginners/

关于java - 模拟 Socket.getOutputStream() 用于测试 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55294241/

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