在我的申请中
`CategoryDao` is a `interface`, `Category` is a model `class`
我的代码是
CategoryTestCase.java
package com.binod.onlineshopping.category.test;
import com.binod.onlineshopping.category.dao.CategoryDao;
import com.binod.onlineshopping.category.model.Category;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import static org.testng.AssertJUnit.assertEquals;
/**
* Created by binod on 7/13/17.
*/
public class CategoryTestCase {
private static AnnotationConfigApplicationContext context;
private static CategoryDao categoryDao;
private Category category;
@BeforeClass
public static void init() {
context = new AnnotationConfigApplicationContext();
context.refresh();
categoryDao = (CategoryDao) context.getBean("categoryDao");
}
@Test
public void addCategory(){
category=new Category();
category.setCname("Television");
category.setCdescription("TV is the product");
category.setImageUrl("c_Tv.png");
assertEquals("sucessfully inserted..",true,categoryDao.addCategory(category));
}
}
错误是:
Error:(34, 6) java: reference to assertEquals is ambiguous
both method assertEquals(java.lang.String,boolean,boolean) in org.testng.AssertJUnit and method assertEquals(java.lang.String,java.lang.Object,java.lang.Object) in org.testng.AssertJUnit match
我正在尝试使用junit
项目springmvc
进行hibernate
测试。我正在尝试在insert
模块中进行测试。但是它会出现上述错误。
我看到很多教程和参考,但我无法处理该错误。
提前谢谢。
答案 0 :(得分:6)
当编译器尝试将方法调用绑定到一个不同的方法时,如果它无法识别比其他方法更具体的方法,则会发出编译错误。这是你的情况。
两个方法assertEquals(java.lang.String,boolean,boolean)in org.testng.AssertJUnit
和方法 assertEquals(java.lang.String,java.lang.Object,java.lang.Object)in org.testng.AssertJUnit
匹配
如果在编译时遇到这种歧义问题,则意味着您不会使用两个原始assertEquals()
作为参数调用boolean
方法。
所以categoryDao.addCategory(category)
很可能会返回Boolean
而不是boolean
。
布尔或布尔返回?
只有当您需要处理null
案例时,才有可能返回Boolean
(因为null
允许它)。但添加操作要么是真的,要么是假的。
null
可能意味着什么?
所以,我认为这应该返回boolean
。
通过这种方式,您可以编译代码,因为编译器绑定的方法没有任何歧义:
assertEquals(java.lang.String,boolean,boolean)
。
assertEquals()或assertTrue()?
此外,要断言表达式是否为真,您可以简单地使用更明确的Assert.assertTrue()
方法:
assertTrue("sucessfully inserted..", categoryDao.addCategory(category));
答案 1 :(得分:1)
替换
assertEquals("sucessfully inserted..",true,categoryDao.addCategory(category));
与
assertEquals("sucessfully inserted..", Boolean.TRUE, categoryDao.addCategory(category));
答案 2 :(得分:0)
我认为这取决于categoryDao.addCategory(category)
返回的内容。由于您已使用它来检查与true
的相等性,这是一个布尔值,它可能会返回原始boolean
或对象包装器Boolean
。
即。 你可能正在调用它,
assertEquals("sucessfully inserted..", true, true or false);
// with Primitive boolean values
,或者
assertEquals("sucessfully inserted..", true, TRUE or FALSE);
// with Boolean values
检查以下org.testng.AssertJUnit
中的两种方法,
public static void assertEquals(String message, 对象预期, 对象实际)
和
public static void assertEquals(String message, 布尔预期的, 布尔实际)
因此,如果您的第三个参数是原始的 布尔值,那么调用哪个方法(显然应该是第一个)不应该存在歧义。 。 但 如果它不是一个拙劣的布尔值,那么关于你在这里引用哪种方法存在歧义 。
参考: