簡體   English   中英

我有一個帶有 RuntimeException “應該沒有參數”的 Junit4 測試,用於參數化測試

[英]I have a Junit4 test with a RuntimeException "should have no parameters" for a parameterized test

我正在使用 Junit4 和 JunitParams 的外部 jar 運行一些代碼。

據我所知,我的代碼設置正確,導入也正確......但是我的測試方法不斷拋出運行時異常,因為它似乎忽略了掛在其中的 @Parameters 注釋。

當它到達我正在測試的方法時,它一直說“java.lang.Exception:方法-----應該沒有參數”

我不確定問題是什么,即使其他人遇到了混合/匹配導入語句等問題。我檢查了我的問題,但這里似乎不是這種情況。

測試運行器 class:

package Chapter8.Wrappers.Tests;

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
    public static void main(String[] args){

        Result result = JUnitCore.runClasses(StringProcessorTest.class);

        for(Failure failures: result.getFailures()) {
            System.out.println(failures.toString());
        }
        System.out.println(result.wasSuccessful());
    }
}

和我的測試 class,StringProcessorTest:

package Chapter8.Wrappers.Tests;

import Chapter8.Wrappers.Challenges.BackwardsString.StringProcessor;
import junitparams.JUnitParamsRunner;
import junitparams.Parameters;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.Arrays;
import java.util.Collection;

@RunWith(JUnitParamsRunner.class)
public class StringProcessorTest {

    private StringProcessor processor;
    private final String expectedResult;
    private final String inputString;

    public StringProcessorTest(String inputString, String expectedResult){
        super();
        this.inputString = inputString;
        this.expectedResult = expectedResult;
    }

    @Before
    public void initialize(){
        processor = new StringProcessor();
    }

    @Parameters
    public static Collection stringValues(){
        return Arrays.asList(new Object[][] { {"HELLO","OLLEH"},
                {"TESTING", "GNITSET"} });
    }

    @Test
    public void objectConstructor_InitializeStringBuilderInside_EqualsPassedString(String inputString, String expectedResult){

        Object input;

        input = inputString;

        processor = new StringProcessor(input);

        Assert.assertEquals(expectedResult, processor.printReverseString());

    }
}

控制台 output:

Chapter8.Wrappers.Tests.StringProcessorTest: java.lang.Exception: Method objectConstructor_InitializeStringBuilderInside_EqualsPassedString should have no parameters
false

Process finished with exit code 0

我發現了一些最終解決的問題-我將 @RunWith 注釋的內部更改為

Parameterized.class

原來我試圖將參數傳遞給@Test注解下的方法,而不僅僅是我的StringProcessorTest class的構造函數; 我從被測方法中刪除了它們。 它已經警告我了,但我不明白為什么更早。

當我重新運行它時,它沒有問題地完成並運行了兩次。

我認為您有兩種選擇來解決您的問題:

  1. stringValues()方法中刪除@Parameters注釋並將其添加到您的測試方法中,如下所示:
private List stringValues(){
    return Arrays.asList(new Object[][] { {"HELLO","OLLEH"}, {"TESTING", "GNITSET"} });
}

@Test
@Parameters(method = "stringValues")
public void objectConstructor_InitializeStringBuilderInside_EqualsPassedString(String inputString, String expectedResult) {
    processor = new StringProcessor(inputString);
    
    Assert.assertEquals(expectedResult, processor.printReverseString());
}

或者

  1. 刪除stringValues()方法並將@Parameters注釋直接放在您的測試方法上:
@Test
@Parameters({ "HELLO, OLLEH", "TESTING, GNITSET" })
public void objectConstructor_InitializeStringBuilderInside_EqualsPassedString(String inputString, String expectedResult) {
    processor = new StringProcessor(inputString);
    
    Assert.assertEquals(expectedResult, processor.printReverseString());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM