2017-12-30 42 views
0

私はjunitを初めて使っていて、自分のプログラムに2つのテストケースを書き込もうとしましたが、引数のタイプが一致しないため、実行できません。 コードを見て、可能であれば適切な解決策を教えてください。 私は単純な変数とその働きについて同じ方法を試しましたが、文字列配列に対しては機能しません。junitの文字列配列入力のテストケースの作成方法(junitの新機能)

ロジッククラス: ここでは、文字列の各文字をスタックにプッシュしようとしています。

public class myClass{ 

protected double myLogic(String[] exp) { 
    Stack<Double> s = new Stack<Double>(); 
    String[] expArr = null; 
    for (int j = 0; j < exp.length; j++) { 
     expArr = exp[j].split("\\s"); 
    } 
    for (int i = 0; i < expArr.length; i++) { 

     if (expArr[i].matches("[0-9]+") || expArr[i].matches("[0-9].+")) { 
      s.push(Double.parseDouble(String.valueOf(expArr[i]))); 
     } 

} 
return s.pop(); 
} 

と、これは私のJUnitテストクラスです:

@RunWith(Parameterized.class) 
public class MyTestCasess { 

public String[] exp=null; 
public Double[] pfResult = { 3, 3 }; 

public MyTestCasess(String[] exp1) { 

    for(int i=0;i<exp1.length;i++){ 
     exp[i]=exp1[i]; 
    } 
} 

@Parameters 
public static List<String> data() { 
    String[] data = { "1 2 3", "6 2 3" }; 
    return Arrays.asList(data); 
} 

@Test 
public void testMainCaller() { 
    myClass objExp = new myClass();  
    Assert.assertEquals("Result", pfResult, objExp.myLogic(exp)); 

} 

} 

ログのエラーメッセージ:

java.lang.IllegalArgumentException: argument type mismatch 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
at java.lang.reflect.Constructor.newInstance(Unknown Source) 
at org.junit.runners.parameterized.BlockJUnit4ClassRunnerWithParameters.createTestUsingConstructorInjection(BlockJUnit4ClassRunnerWithParameters.java:43) 
at org.junit.runners.parameterized.BlockJUnit4ClassRunnerWithParameters.createTest(BlockJUnit4ClassRunnerWithParameters.java:38) 
at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:266) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:263) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.junit.runners.Suite.runChild(Suite.java:128) 
at org.junit.runners.Suite.runChild(Suite.java:27) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 
+0

投稿にエラー/ログメッセージを追加してください... – khmarbaise

+0

エラーログはありません。文字列入力がコンソールから取得された場合、コードは正常に動作しています。しかし、Junitテストケースを使用すると失敗します。 Junitのテストケースを適切に実装していない可能性があります。 Junitタブのエラーが「引数の不一致」 – Saurabh

+0

'mvn clean package'を介してコマンドラインでビルドを実行してください... – khmarbaise

答えて

1

Stringのリストを提供data()方法。つまり、各パラメータセットは単一のStringです。残念ながら、テストクラスのコンストラクタでは、Stringの代わりにStringの配列が必要です。これがあなたのテストが失敗する理由です。

+0

あなたは言っている、私は2つの別の文字列変数を宣言し、テストケースを続行する必要がありますか? – Saurabh

+0

ありがとうございました.. :)今働いています – Saurabh

+0

よろしくお願いします。 –

関連する問題