我在使用Mockito时遇到了麻烦,因为当我测试另一个时,我不能嘲笑第三类的属性。
我正在测试的类:
@Component
public class MyTransformer {
@Autowired
private MyService myService;
public Output myMethod(Context context, Input input, Something something) throws Exception {
ServiceInput serviceInput = createServiceInput(something);
myService.doSomething(context, input, serviceInput);
return new Output();
}
}
上一个类中使用的接口:
public interface MyService {
public void doSomething(Context context, Input input, Something something) throws Exception;
}
服务的真正实现:
@Service
public class MyServiceImpl implements MyService {
@CustomServiceAnnotation(serviceName = "MyServiceName", apiPaths = {
ServiceApiPath.class
})
private GatewayProxyInvoker gatewayProxyInvoker; // this property is null
@Override
public void doSomething(Context context, Input input, Something something) throws Exception {
Request request = MyServiceCommand.createRequest(context, input, something);
Response response = Invoker.invoke(Response.class, gatewayProxyInvoker, context, request);
}
}
由于gatewayProxyInvoker属性为null而引发NullPointerException的类:
public class Invoker {
public static T invoke(final Class<T> responseType, final GatewayProxyInvoker gatewayProxyInvoker, final Context context, S request) throws Exception {
return gatewayProxyInvoker.invoke(responseType, context, request);
}
}
测试等级:
@RunWith(MockitoJUnitRunner.class)
public class MyTransformerTest {
@InjectMocks
private MyTransformer transformer;
@Mock
private MyServiceImpl myService;
@Mock
private GatewayProxyInvoker gatewayProxyInvoker;
@Test
public void myMethodTest() throws Exception {
Response myResponse = new Response();
doCallRealMethod().when(myService).doSomething(any(Context.class), any(Input.class), any(Something.class));
when(gatewayProxyInvoker.invoke(any(Class.class), any(Context.class), any(Request.class))).thenReturn(myResponse);
transformer.myMethod(/*valid input params*/);
}
}
属性“gate wayProxyInvoker”为空,因此我认为我在嘲笑它的过程中做错了什么。
代码运行良好,是我的JUnit测试不起作用。
在测试另一个类时,如何模拟第三个类的属性?在我的示例中,您可以看到该方法是void,我正在测试的类使用接口。
谢谢大家,伙计们!
我在这里找到了一个解决方案:Mockito将mock注入间谍对象
这个例子效果很好:
@RunWith(MockitoJUnitRunner.class)
public class MyTransformerTest {
@InjectMocks
private MyTransformer transformer;
@InjectMocks
private MyServiceImpl myService;
@Mock
private GatewayProxyInvoker gatewayProxyInvoker;
@Before
public void init() {
myService = Mockito.spy(new MyServiceImpl());
MockitoAnnotations.initMocks(this);
}
@Test
public void myMethodTest() throws Exception {
Response myResponse = new Response();
when(gatewayProxyInvoker.invoke(any(Class.class), any(Context.class), any(Request.class))).thenReturn(myResponse);
transformer.myMethod(/*valid input params*/);
}
}
我试图模拟一个公共类,但是当这样做时,Mockito抛出一个异常。 我想嘲弄的班级:https://github.com/scribejava/scribejava/blob/master/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java 测试代码: 完整堆栈跟踪:
我正在尝试在我的Spring启动应用程序中测试一个服务类。服务类中注入了bean。但是当我试图在我的测试类中模拟这个bean时,我遇到了问题。在测试用例中出现以下错误: 测试类看起来像这样: //没有什么花哨的,只是简单的验证保存方法被调用 我所尝试的: Mockito无法模仿这个类 将mockito内联版本更新为较新/较旧版本 使用的依赖项: mockito-inline::3
我正在使用PowerMockito为一个类编写junit。我可以模拟私有方法,但无法模拟另一个类的公共方法。在下面的测试类中,B的对象没有被模仿。我做错了什么? 另一个具有所有公共方法的类B 现在我有A班的考级 下面是我使用的依赖关系-
问题内容: 我正在为具有两个方法methodA,methodB的类编写JUnit测试用例。我想在测试用例中模拟对methodA的methodB调用,我正在对正在测试的类使用间谍,但仍然执行methodB。 这是课程 这是测试课 尽管我已对其进行了模拟,但方法B仍会得到调用。请向我建议一个使用正确方法模拟同一类methodA的methodB调用的解决方案。 问题答案: 我昨天碰到这个,因为间谍最好做
我希望你能帮助我。 我的问题是: 当传递数组列表中的对象的实例时,我将该数组列表传递给另一个类,如何访问它的属性? 我可以在将其传递给另一个类之前访问属性。 “主要”类将数据传递给“员工”类。 “Employees”类接收数据,将其添加到一个数组中,然后从该数组转到“AllStaff”类 请注意,我可以在方法“addToAll人员()”中访问属性 在类"所有的工作人员",是我没有访问的属性 完整代