通过使用注射剂测试输出式
这是主要类
public class ServerConnector {
private String ipAddress;
private int portNumber;
private Socket socket;
private DataOutputStream dataOutputStream;
private DataInputStream dataInputStream;
public ServerConnector(String ipAddress, int portNumber){
this.ipAddress = ipAddress;
this.portNumber = portNumber;
}
public void connect(){
socket = new Socket();
InetSocketAddress socketAddress = new InetSocketAddress(ipAddress, portNumber);
socket.connect(socketAddress, 5000);
dataOutputStream = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
dataInputStream = new DataInputStream((new BufferedInputStream(socket.getInputStream())));
}
public void send(byte[] sendingData){
dataOutputStream.writeInt(sendingData.length);
dataOutputStream.write(sendingData);
dataOutputStream.flush();
}
...
}
,这是我要测试的发送方法
public class ServerConnectorTest {
@Mock
private DataOutputStream mockDataOutputStream = new DataOutputStream(null);
@InjectMocks
ServerConnector connector = new ServerConnector("10.10.10.10", 1234);
@Captor
private ArgumentCaptor<byte[]> byteValueCapture;
@Captor
private ArgumentCaptor<Integer> intValueCapture;
@Test
@DisplayName("Send Data Test")
void should_send_data_to_server(){
MockitoAnnotations.openMocks(this);
try {
byte[] sendingData = "Test".getBytes(StandardCharsets.UTF_8);
connector.send(sendingData);
Mockito.verify(mockDataOutputStream).writeInt(intValueCapture.capture());
Mockito.verify(mockDataOutputStream).write(byteValueCapture.capture());
int writtenInt = intValueCapture.getValue();
byte[] writtenData = byteValueCapture.getValue();
} catch (IOException e) {
e.printStackTrace();
}
}
}
我想测试连接器的方法。 我找不到问题。.我已经发现了类似的注射和模拟测试,但没有帮助。
Here is main Class
public class ServerConnector {
private String ipAddress;
private int portNumber;
private Socket socket;
private DataOutputStream dataOutputStream;
private DataInputStream dataInputStream;
public ServerConnector(String ipAddress, int portNumber){
this.ipAddress = ipAddress;
this.portNumber = portNumber;
}
public void connect(){
socket = new Socket();
InetSocketAddress socketAddress = new InetSocketAddress(ipAddress, portNumber);
socket.connect(socketAddress, 5000);
dataOutputStream = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
dataInputStream = new DataInputStream((new BufferedInputStream(socket.getInputStream())));
}
public void send(byte[] sendingData){
dataOutputStream.writeInt(sendingData.length);
dataOutputStream.write(sendingData);
dataOutputStream.flush();
}
...
}
and this is what I want to do for testing send method
public class ServerConnectorTest {
@Mock
private DataOutputStream mockDataOutputStream = new DataOutputStream(null);
@InjectMocks
ServerConnector connector = new ServerConnector("10.10.10.10", 1234);
@Captor
private ArgumentCaptor<byte[]> byteValueCapture;
@Captor
private ArgumentCaptor<Integer> intValueCapture;
@Test
@DisplayName("Send Data Test")
void should_send_data_to_server(){
MockitoAnnotations.openMocks(this);
try {
byte[] sendingData = "Test".getBytes(StandardCharsets.UTF_8);
connector.send(sendingData);
Mockito.verify(mockDataOutputStream).writeInt(intValueCapture.capture());
Mockito.verify(mockDataOutputStream).write(byteValueCapture.capture());
int writtenInt = intValueCapture.getValue();
byte[] writtenData = byteValueCapture.getValue();
} catch (IOException e) {
e.printStackTrace();
}
}
}
I'd like to test connector.send() method but it fails due to dataOutputStream is null.
I could't find what the problem is.. I already found similar inject and mock testing but didn't help.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论