testng模拟方法返回值

时间:2016-09-30 00:52:47

标签: java mockito

我有以下代码

private EditAttribute editAttr;
@Mock
private EditAttributeService editAttrServ;

@Mock
private EditAttributeDAO editAttributeDAO;

@DataProvider(name = "getNamesValues")
public Object[][] createData1() {
 return new Object[][] {
   { new EditAttribute.Builder().bioId("abc").sheetId("12e").fid("9BD2B75E-3B00-11DF-B7E4-005056A3157F").context("[{\"id\": 'B8031714-F23B-11DF-8F44-005056A3157F_C4B10A72-F25C-11DF-8F44-005056A3157F',\"value\": \"123\"},{\"id\": '4AB3CB04-2527-11DF-994B-005056A3157F_00CA7BCA-3B9B-11DF-B7E4-005056A3157F' ,\"value\": \"12322\"}]").target("").value("").build() }

 };
}

@BeforeClass
public void setUp() {
    MockitoAnnotations.initMocks(this);
    editAttrServ = new EditAttributeService();
}


@Test(dataProvider ="getNamesValues")
public void TestselectAttributes(EditAttribute editAttribute){
    LinkedHashMap<String,LinkedList<String>> queryRes=new LinkedHashMap<String,LinkedList<String>>();
    LinkedList<String> columnsnames=new LinkedList<String>();
    columnsnames.add("city");
    queryRes.put("ColumnName",columnsnames);
    LinkedList<String> tableName=new LinkedList<String>();
    tableName.add("Dim_Plant");
    queryRes.put("TableName",tableName);
    System.out.println("queryRes="+queryRes.size());
    Mockito.when(editAttributeDAO.getNames("", "", "", "", "")).thenReturn(queryRes);

    Assert.assertEquals( editAttrServ.selectAttribute(editAttribute,"","").size(),2);
}

方法editAttributeDAO.getNames(“”,“”,“”,“”,“”)调用DAO类方法。我期待这个方法不被执行,因为我在使用mockito时定义了返回值。但是似乎失败并且方法被调用。我做错了吗?

1 个答案:

答案 0 :(得分:0)

我无法理解您的测试。前9行似乎都是测试设置的一部分。因此,我假设“selectAttribute”是您正在测试的业务方法。但是,您的代码也在模拟对象上调用该方法。 EditAttributeService是一个接口还是一个类?如果它是一个接口,那么Mockito将为您模拟selectAttribute方法并返回一个空集合。如果它是一个类,它将执行现有的方法,但你没有告诉模拟的editAttributeService如何链接到“editAttributesDAO”,这可能就是为什么它没有使用你在测试开始时设置的结果方法