gpt4 book ai didi

java - 在测试中重用对象中的数据

转载 作者:太空宇宙 更新时间:2023-11-04 09:31:21 26 4
gpt4 key购买 nike

我有一些测试

 private DataJpa myObject = new DataJpa();
private DaoService daoService = mock(DaoService.class);
private RestServiceImpl service = spy(RestServiceImpl.class);

@Before // I've tried @BeforeClass too
public void init(){

service.setDaoService(daoService);
when(daoService.selectObject(anyString())).thenReturn(myObject);
}

@Test
public void test1(){

Response registerFirstResponse = service.registerDevice(serialNumber, token, registrationDeviceRequest);

createMyObjectJpa(field1,field2,field3);

Response registerSecondResponse = service.registerDevice(serialNumber, token, registrationDeviceRequest);

assertEquals(Response.Status.CREATED.getStatusCode(), registerFirstResponse.getStatus());
assertEquals(Response.Status.OK.getStatusCode(), registerSecondResponse.getStatus());
}

private void createJpa(field1,field2,field3){
myObject.setDeviceId(field1);
myObject.setPushToken(field2);
}

还有我的 service 内的 registerDevice 方法

 public Response registerDevice(String serialNumber, String token, String registrationDeviceRequest){
DataJpa jpa=daoService.selectObject(serialNumber);
if(jpa==null){
//here I must fulfill my jpa
dataJpa = StaticUtils.createJpa(field1,field2,field3);
return Response.status(Response.Status.CREATED).build();
}else{
return Response.status(Response.Status.OK).build();
}
}

因此,在第一次调用 doMyMethod 后,我的 myObject 满足了一些数据,例如 testField,但在第二次调用时,我希望 myObject 已经具有该数据,但我在 myObject 中得到 null 并且它再次满足。

我需要测试它是否返回有关 myObject 的响应,如果它里面有一些数据。

如何将不同的字段保存到 myObject 中直到第二次调用?

编辑

如何测试我的问题。当您尝试在 if 语句的 Class2.testClass() 内调用 responseSecondClass1 时,您将得到 null,但我需要它将成为 fulfiled 对象;

public class Class1 {

String field1;
String field2;
String field3;

public Class1() {
}

public Class1(String field1, String field2, String field3) {
this.field1 = field1;
this.field2 = field2;
this.field3 = field3;
}

}

public class Class2 {

public Response testClass() {

Class1 class1 = getMyObjectFromMethod();

if (class1 == null) {
return Response.status(Response.Status.OK).build();
} else {
return Response.status(Response.Status.NOT_MODIFIED).build();
}
}


public Class1 getMyObjectFromMethod() {

Class1 class1 = new Class1("field1", "field2", "field3");
return class1;
}
}

@Test
public void test1() {
Class1 class1 = new Class1();
Class2 class2 = spy(Class2.class);
when(class2.getMyObjectFromMethod()).thenReturn(class1);

Response responseFirstClass1 = class2.testClass();

class1 = fulfilClass();
Response responseSecondClass1 = class2.testClass();

assertEquals(Response.Status.OK.getStatusCode(), responseFirstClass1.getStatus());
assertEquals(Response.Status.NOT_MODIFIED.getStatusCode(), responseSecondClass1.getStatus());

}

private Class1 fulfilClass() {
Class1 class1 = new Class1("field1", "field2", "field3");
return class1;
}

最佳答案

由于您在同一个测试中调用 doMyMethod 两次,我认为您应该明确告诉 Mockito 在第二次调用中返回什么。

类似的事情:

when(myClass.doMyMethod(any()))
.thenReturn(myObject)
.thenReturn(myObject);

如果您需要不同的响应,您可以这样做:

 when(myClass.doMyMethod(any()))
.thenReturn(myObject1)
.thenReturn(myObject2);

或者甚至可能

when(myClass.doMyMethod(any()))
.thenReturn(myObject)
.thenThrow(new MyException(...));

关于java - 在测试中重用对象中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57057972/

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