Java 最终类模拟未返回预期值
我正在尝试编写一个类的单元测试,该类将DatagramPacket引入其构造函数。我在下面列出了第一次测试和第二次测试中的课程 问题是,基于when.thenReturn调用,我得到的输出没有一个是我所期望的。在我的测试中,我有三个print语句在第一个代码块中查看测试方法的底部。它的输出是 IP:0.0.0.0,端口:0,数据: 我预期的输出是: IP:90.35.52.52,端口:25200,数据:心跳^0a522 有人知道我为什么没有收到预期的输出吗 谢谢大家! UDPPacket_TEST.java UDPPacket.javaJava 最终类模拟未返回预期值,java,unit-testing,mockito,powermock,Java,Unit Testing,Mockito,Powermock,我正在尝试编写一个类的单元测试,该类将DatagramPacket引入其构造函数。我在下面列出了第一次测试和第二次测试中的课程 问题是,基于when.thenReturn调用,我得到的输出没有一个是我所期望的。在我的测试中,我有三个print语句在第一个代码块中查看测试方法的底部。它的输出是 IP:0.0.0.0,端口:0,数据: 我预期的输出是: IP:90.35.52.52,端口:25200,数据:心跳^0a522 有人知道我为什么没有收到预期的输出吗 谢谢大家! UDPPacket_TES
并不是说我喜欢测试的方法,而是我理解有时候的必要性。。。。 深入研究PowerMockito的源代码,您会发现您根本没有创建DatagramPacket的模拟实例,而是接收一个常规实例 但是,您可以使用以下方法设置实例的字段: 固定代码 UDPPacket_TEST.java 生成所需的输出:
IP: 90.35.52.52, Port: 25200, Data: heartbeat^0a552
public class UDPPacket {
String mIP;
int mPort;
String mData;
public UDPPacket(DatagramPacket receivedPacket) {
//Grab the information out
mData = new String(receivedPacket.getData());
mIP = receivedPacket.getAddress().getHostAddress();
mPort = receivedPacket.getPort();
}
public String getIP() {
return mIP;
}
public int getPort() {
return mPort;
}
public String getData() {
return mData;
}
}
Whitebox.setInternalState(mDatagramPacket, "buf", packetData);
@RunWith(PowerMockRunner.class)
@PrepareForTest(DatagramPacket.class)
public class UDPPacket_TEST {
DatagramPacket mDatagramPacket;
UDPPacket mPacket;
InetAddress addRet;
@Before
public void setup() {
mDatagramPacket = PowerMockito.mock(DatagramPacket.class);
addRet = mock(InetAddress.class);
when(addRet.getHostAddress()).thenReturn("90.35.52.52");
PowerMockito.when(mDatagramPacket.getPort()).thenReturn(25200);
}
@Test
public void test() {
byte[] packetData = "heartbeat^0a552".getBytes();
Whitebox.setInternalState(mDatagramPacket, "buf", packetData);
Whitebox.setInternalState(mDatagramPacket, "address", addRet);
Whitebox.setInternalState(mDatagramPacket, "port", 25200);
PowerMockito.when(mDatagramPacket.getData()).thenReturn(packetData);
mPacket = new UDPPacket(mDatagramPacket);
System.out.println(String.format("IP: %s, Port: %d, Data: %s", mPacket.getIP(), mPacket.getPort(), mPacket.getData()));
}
}
IP: 90.35.52.52, Port: 25200, Data: heartbeat^0a552