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..只需直接断言即可。希望有帮助