web-dev-qa-db-ja.com

単体テストを実行するとき、assertEqualsへの参照があいまいです

私のアプリケーションでは

`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プロジェクトでspringmvchibernateテストしようとしています。insertモジュールでテストしようとしていますが、上記のエラーが発生します。私は多くのチュートリアルとリファレンスを見ましたが、そのエラーを処理することができません。前もって感謝します。

8
Binod Pant

コンパイラーがメソッド呼び出しを1つの別個のメソッドにバインドしようとしたときに、他のメソッドよりも具体的なメソッドを識別できない場合、コンパイルエラーが発生します。それはあなたの場合です。

org.testng.AssertJUnitの両方のメソッドassertEquals(Java.lang.String、boolean、boolean)

org.testng.AssertJUnitのメソッドassertEquals(Java.lang.String、Java.lang.Object、Java.lang.Object)

一致

コンパイル時にこのあいまいさの問題がある場合は、2つのプリミティブbooleanを引数としてassertEquals()メソッドを呼び出さないことを意味します。

したがって、categoryDao.addCategory(category)はおそらくBooleanを返し、booleanは返しません。

ブール値またはブール値の戻り値?

nullを返す可能性を与えることは(Booleanで許可されているため)、nullの場合を処理する必要がある場合にのみ意味があります。ただし、加算演算はtrueまたはfalseのいずれかです。
nullはどういう意味ですか?
つまり、これはbooleanを返すはずだと思います。このようにして、コンパイラーによってバインドされたメソッドにあいまいさがないため、コードは正常にコンパイルされます。

assertEquals(Java.lang.String,boolean,boolean)

assertEquals()またはassertTrue()?

さらに、式が真であるかどうかをアサートするには、より明示的なAssert.assertTrue()メソッドを使用するだけです。

assertTrue("sucessfully inserted..", categoryDao.addCategory(category));
9
davidxxx

交換

assertEquals("sucessfully inserted..",true,categoryDao.addCategory(category));

assertEquals("sucessfully inserted..", Boolean.TRUE, categoryDao.addCategory(category));
1
talex

これは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の以下の2つのメソッドを確認してください。

public static void assertEquals(String message、Object expected、Object actual)

そして

public static void assertEquals(String message、boolean expected、boolean actual)

したがって、3番目のパラメーターがプリミティブboolean値である場合、その値はありません。どのメソッドを呼び出すかについて曖昧であること(明らかに最初のメソッドである必要があります)。しかし、それが原始的なブール値でない場合、ここで参照しているメソッドについてあいまいさがあります

参照:

0
prime