相关疑难解决方法(0)

测试Java套接字

我正在开发一个网络应用程序,我希望得到正确的单元测试.这个时候我们会这样做,你知道吗?:)

不过,我在测试网络连接时遇到了麻烦.

在我的应用程序中,我使用plain java.net.Sockets.

例如:

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class Message {
    byte[] payload;

    public Message(byte[] payload) {
        this.payload = payload;
    }

    public boolean sendTo(String hostname, int port) {
        boolean sent = false;

        try {
            Socket socket = new Socket(hostname, port);

            OutputStream out = socket.getOutputStream();

            out.write(payload);

            socket.close();

            sent = true;
        } catch (UnknownHostException e) {
        } catch (IOException e) {
        }

        return sent;
    }
}
Run Code Online (Sandbox Code Playgroud)

我读到了关于嘲笑但不确定如何应用它.

java sockets unit-testing mocking

30
推荐指数
2
解决办法
5万
查看次数

嘲弄保护方法

我想模拟一个继承的受保护方法.我无法直接从java代码调用此方法,因为它从另一个包中的类继承.我找不到一种方法来指定这个方法来存入when(...)

package a;

public class A() {
    protected int m() {}
}

package b;

public class B extends a.A {
    // this class currently does not override m method from a.A
    public asd() {}
}

// test
package b;

class BTest {
    @Test
    public void testClass() {
        B instance = PowerMockito.spy(new B());
        PowerMockito.when(instance, <specify a method m>).thenReturn(123);
        //PowerMockito.when(instance.m()).thenReturn(123); -- obviously does not work
    }
}
Run Code Online (Sandbox Code Playgroud)

我查看了PowerMockito.when覆盖,这似乎只是私人方法!

如何指定受保护的方法?

java mockito powermock powermockito

16
推荐指数
1
解决办法
4万
查看次数

使用 PowerMockito 和 Mockito 测试对其他工件方法的调用

我确信这是一个很常见的问题,但我真的无法摆脱这个问题,因为我在模拟私有方法时会在内部调用另一个方法并返回一个集合。我正在测试的类有一个公共方法,它调用私有方法来获取 Collection 对象。我使用 PowerMock 创建私有方法的间谍。

public void method1(String s)
{
     Collection<Object> list = invokePrivate()
}

private Collection<Object> invokePrivate()
{
     Wrapper wrapperObj = Factory.getInstance.getWrapper();
     Collection<Object> list = wrapperObj.callWrapperMethod(); // This always calls into real method, instead of mocked version.
     return list;
}
Run Code Online (Sandbox Code Playgroud)

测试类-:

因此,为了测试公共方法“method1”,我使用 PowerMockito 创建一个间谍来监视私有方法并返回演示列表。

MainClass obj = new MainClass();
MainClass spy = PowerMockito.spy(obj);
PowerMockito.when(spy, method(MainClass.class, "inokePrivate"))
                            .thenReturn(list); // demo list which exists as a test class member.
Run Code Online (Sandbox Code Playgroud)

上面调用了私有方法,该方法又尝试调用位于不同工件中的wrapperObj.callWrapperMethod(),并在那里中断,因为它在那里找不到某些实现。所以我尝试模拟wrapperObj.callWrapperMethod。

WrapperClass wr = new WrapperClass();
WrapperClass spy1 = PowerMockito.spy(wr);
when(spy1.callWrapperMethod()).thenReturn(list) // …
Run Code Online (Sandbox Code Playgroud)

java junit unit-testing mockito powermock

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