Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 最终类模拟未返回预期值_Java_Unit Testing_Mockito_Powermock - Fatal编程技术网

Java 最终类模拟未返回预期值

Java 最终类模拟未返回预期值,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

我正在尝试编写一个类的单元测试,该类将DatagramPacket引入其构造函数。我在下面列出了第一次测试和第二次测试中的课程

问题是,基于when.thenReturn调用,我得到的输出没有一个是我所期望的。在我的测试中,我有三个print语句在第一个代码块中查看测试方法的底部。它的输出是

IP:0.0.0.0,端口:0,数据:

我预期的输出是:

IP:90.35.52.52,端口:25200,数据:心跳^0a522

有人知道我为什么没有收到预期的输出吗

谢谢大家!

UDPPacket_TEST.java

UDPPacket.java


并不是说我喜欢测试的方法,而是我理解有时候的必要性。。。。 深入研究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