gpt4 book ai didi

java - JUnit 使用 mockito

转载 作者:行者123 更新时间:2023-11-30 11:17:16 25 4
gpt4 key购买 nike

我有一个名为 Service.class 的服务类和两个名为 A.class 和 B.class 的类服务类有一个基于类 A 和 B 的对象调用方法的方法。那么我如何创建 A 和 B 的 mockito 对象,以便我可以在服务类方法中传递该 mockito 对象。这是 JUnit 测试所需要的。例如。服务类

    class Service {
A a;
Response response;

public Service(){

}

public Service(A a, B b){
this.a= a;
this.b = b;
}

public Respose test(InputStream i,InputStream i1){
InputStream inStreamA = a.method1(i,i1);
Response response= response.method2(inStreamA);

return response;
}


and in Response.class

public Response method2(InputStream i1)){
return Response.ok().build();
}

编辑:我的 JUnit 类我已经创建了两个类

     A mockedA = mock(A.class);
Response mockedResponse = mock(Response.class);

when(mockedA.method1(new ByteArrayInputStream("test").getByte()).thenReturn(InputStream);
when(mockedResponse.method2(new ByteArrayInputStream("test").getByte()).thenReturn(Res);

Service service = new Service(mockedA , mockedResponse );
Response i = service.test(new ByteArrayInputStream("test").getByte(), new ByteArrayInputStream("test1").getByte());

System.out.print(response);
assertEquals(200,response.getStatus());

// but here i am getting null pointer

最佳答案

您可以在测试中简单地模拟它们。

首先添加以下导入:import static org.mockito.Mockito.*;

然后在你的代码中

 //You can mock concrete classes, not only interfaces
A mockedA = mock(A.class);
B mockedB = mock(A.class);

//stubbing
when(mockedA.method1(any(InputStream.class))).thenReturn(null);
when(mockedB.method2(any(InputStream.class))).thenReturn(null);

然后将它们作为参数传递给服务构造函数。

如果没有 stub ,您模拟的类方法将返回空值,通过 stub 您可以指定它们应该返回什么值。

下面的代码显示测试方法返回 400

  A mockedA = mock(A.class);
B mockedB = mock(B.class);

when(mockedA.method1(new ByteArrayInputStream("test".getBytes()))).thenReturn(null);
when(mockedB.method2(new ByteArrayInputStream("test".getBytes()))).thenReturn(null);

Service service = new Service(mockedA , mockedB );
String i = service.test(new ByteArrayInputStream("test".getBytes()));

System.out.println(i);

关于java - JUnit 使用 mockito,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24445391/

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