运行单元测试时,对assertEquals的引用是不明确的

时间:2017-07-13 14:19:56

标签: java spring spring-mvc junit

在我的申请中

`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模块中进行测试。但是它会出现上述错误。 我看到很多教程和参考,但我无法处理该错误。 提前谢谢。

3 个答案:

答案 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,                                   布尔预期的,                                   布尔实际)

因此,如果您的第三个参数是原始的 布尔值,那么调用哪个方法(显然应该是第一个)不应该存在歧义。 。 但 如果它不是一个拙劣的布尔值,那么关于你在这里引用哪种方法存在歧义

参考: