我们如何测试将泛型作为方法参数的方法参数。
public class AbstractServiceClient(){
public constructBusinessClient(String serviceName, String clientName, Class<? extends AbstractTO> requestClass, AbstractTO serviceRequestTO){
constructBusinessServicesRestClientProperties(servicename, clientName, requestClass, servicerequestTO);
}//编写测试用例,检查扩展AbstractTO的类是否传给了下面的方法(requestClass类)
public BusinessServicesRestClient constructBusinessServicesRestClientProperties(String serviceName,String clientName, Class<? extends AbstractTO> requestClass
, AbstractTO serviceRequestTO){
//set values
}
}
public class AbstractServiceClientTest {
private Class<? extends AbstractTO> requestClass;
private static final String CLIENT_NAME = "clientName";
private AbstractTO serviceRequestTO ;
private AbstractServiceClient abstractServiceClient;
@Test
public void constructBusinessServiceClientShouldSetCorrectClientName() {
abstractServiceClient.constructBusinessClient(operation,clientName, requestClass, abstractClass);
abstractServiceClient.constructBusinessServicesRestClientProperties(any(String.class), eq(CLIENT_NAME), requestClass, any(AbstractTO.class));
}
}
@Test
public void constructBusinessServiceClientShouldSetCorrectRequestClass() {
abstractServiceClient.constructBusinessClient(operation,clientName, requestClass, abstractClass);
abstractServiceClient.constructBusinessServicesRestClientProperties(any(String.class), eq(CLIENT_NAME), eq(requestClass), any(AbstractTO.class));
}
}
}发布于 2014-04-12 10:58:40
这个问题有点模糊,无法生成代码作为答案,但本质上,如果问题是要确保在调用类B的方法C时,使用某些参数调用类D的方法A,则通常要做的事情如下所示。
B类的模拟对象,你将在它上面检查交互。D类的真实对象,你实际上要把你的模拟B注入到你的真实对象D中。这可以通过D的构造函数来完成,在这种情况下,此步骤将是步骤2的一部分。C,将调用方法A的任何参数与您的模拟对象上的正确参数一起传递。如果方法A的返回值对于类D的工作很重要,那么它将像这样工作。
B类的模拟对象,你将在它上面检查交互。D类的真实对象,你实际上要把你的模拟B注入到你的真实对象D中。这可以通过returned.A,因此当使用正确的参数调用它时,适当的返回值是returned.D,传递任何参数required.A的对象的状态,以确保来自A的返回值对状态有正确的影响。如果D的状态不正确,则说明D未正确处理返回,或者从未调用过A方法,或者使用错误的参数调用了A方法。在第二种情况下,既不需要验证mock,也不需要清除它。嘲笑纯粹主义者会告诉你,你应该要么存根,要么验证,但永远不能两者兼而有之。
现在,看看你问题中的代码,在我看来,你似乎没有完成任何必要的步骤。所以这个“测试用例”不会做太多的事情。即使你认为“它可以工作”,你也没有测试过任何东西。
就Mockito的使用而言,您可以使用带匹配器的方法调用来存根或验证方法;因此,您的代码可以用于上面描述的两种场景中的任何一种。
但你必须做一个或另一个。所以如果你要验证,你可以写
verify(mockAbstractServiceClient).constructBusinessServicesRestClientProperties(anyString(), eq(CLIENT_NAME), eq(SomeConcreteTO.class), any(AbstractTO.class));或者,如果您使用的是stubbing,您可以这样写
doReturn(someValue).when(mockAbstractServiceClient).constructBusinessServicesRestClientProperties( anyString(), eq(CLIENT_NAME), eq(SomeConcreteTO.class), any(AbstractTO.class));当然,还有另一种编写方法,使用when和thenReturn,但我发现使用doReturn更直观。
请注意,在这两个示例中,我都对Class对象使用了eq。这就是如何检查这是不是传递给方法的类。
https://stackoverflow.com/questions/23020817
复制相似问题