我所处的场景public class SecondClass{ SecondClass(FirstClass fc){ ... } public void foo(String a,String b){ .... }}public class FirstClass{ private SecondClass sc; public void init(){ sc = new SecondClass(this); } public void bar(List<Integer> input){ ..... sc.foo(s1,s2); }}我想保留进入foo的String参数a和b。测试类如下@PrepareForTest({ FirstClass.class, SecondClass.class })public class SampleTest{ private String[] texts; @Test public void testBar() throws Exception { texts = new String[2]; final FirstClass fc = mock(FirstClass.class); final SecondClass sc = spy(new SecondClass(fc)); doAnswer(invocation -> { texts = (String[]) invocation.getArguments(); return null; }).when(sc).foo(anyString(), anyString()); final List<Integer> input = new ArrayList<>(); input.add(1); fc.bar(input); System.out.println(texts[0]+"<>"+text[1]); }}最后的sysout打印null null。为什么texts数组没有更新? (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 基本的问题是FirstClass初始化其自己的SecondClass副本,而您想提供一个模拟或类似内容。控制反转或依赖注入方法旨在通过给类提供运行所需的组件来缓解这种情况。您是否可以代替地将SecondClass的副本注入FirstClass(例如,通过init()的参数)?这样,您可以在测试场景中提供模拟,从而测试方法调用。例如FirstClass fc = new FirstClass();fc.init(myMockedSecondClass);fc.bar(...);// now test the invocations on your mock (adsbygoogle = window.adsbygoogle || []).push({}); 07-28 08:16