Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Junit 如何模拟字符串数组_Junit - Fatal编程技术网

Junit 如何模拟字符串数组

Junit 如何模拟字符串数组,junit,Junit,下面是示例代码,如果这项工作,我可以在业务代码中使用相同的逻辑 class A{ public String[] getString(String[] a){ System.out.println("called"); return a; }} class B{ A a; public String[] getString(){ String[] ab = {"inside main class"}; a= new A(); return

下面是示例代码,如果这项工作,我可以在业务代码中使用相同的逻辑

class A{    
public String[] getString(String[] a){
    System.out.println("called");
    return a;
}}

class B{
A a;    
public String[] getString(){
    String[] ab = {"inside main class"};
    a= new A();
    return a.getString(ab);
}
}
朱尼特:

public class test{
private MockMvc mockMvc;
@Mock
private A a;

@InjectMocks
private B b;

@Before
public void setUp() {
    MockitoAnnotations.initMocks(this);
    mockMvc = MockMvcBuilders.standaloneSetup(b).build();
}

@Test
public void test2Object(){
    String[] bc = {"mock main class"};      
    Mockito.when(a.getString(Mockito.any(String[].class))).thenReturn(bc);
    System.out.println((b.getString())[0]);
}   
}
预期o/p“模拟主类”,但我得到“主类内部”


有人能帮我解决这个问题吗。

您正在注入a的模拟,但在B的getString方法中,您正在创建一个新的a实例并处理它。删除它,模拟版本将被调用:

class B{
   A a;    
   public String[] getString(){
      String[] ab = {"inside main class"};
      // a= new A();
      return a.getString(ab);
   }

   public void setA(A a){this.a = a;}
}
我建议添加一个setter,以便在生产中以某种方式注入它

更新

您的测试类应该类似于:

public class test{

   @Mock
   private A a;

   @InjectMocks
   private B b;

   @Before
   public void setUp() {
     MockitoAnnotations.initMocks(this);
   }

   @Test
   public void test2Object(){
       // Arrange
       String[] bc = {"mock main class"};                                    
       Mockito.when(a.getString(Mockito.any(String[].class)))
               .thenReturn(bc);

       // Act
      String result = b.getString()[0];

      // Assert
      assertEquals(result, bc[0]);
   }   
}

不过,谢谢您,如果我使用vefify,我会得到错误Mockito.verify(a.getString)(Mockito.any(String[].class));错误:“需要但未调用”但在发布整个方法时使用时效果良好?@Test public void test2Object(){String[]bc={“mock main class”};Mockito.verify(a).getString(Mockito.any(String[].class));System.out.println((b.getString())[0]);}基类b{a a;public String[]getString(){String[]ab={“inside main class”};String str=“”;//a=new a();返回a.getString(ab);}}}需要但未调用的错误:a.getString();您能告诉我您解决此问题的建议吗?已添加了测试类,该类应与您的示例一起使用..您似乎不需要使用verify..只需直接断言即可。希望有帮助