【发布时间】:2014-02-19 00:48:21
【问题描述】:
我刚刚开始进行单元测试。我从教程点网站的 pdf 中完成了 junit 教程。所以我的问题是,我想测试我的调车场算法和我的 RPNEvaluator。
构造函数(以及任何其他帮助您了解上下文的变量)如下所示:
ShuntingYard.java:
private ArrayList<String> tokens = new ArrayList<String>();
public ShuntingYard(ArrayList<String> tokens) {
this.tokens = tokens;
}
RPNEvaluator.java:
private Queue<String> polishExpression;
public RPNEvaluator(Queue<String> exp) {
polishExpression = exp;
}
ShuntingYard.java 有一个名为 toRpn() 的方法,它将接受一个 ArrayList 并在经过一些处理后返回一个 Queue。
RPNEvaluator 有一个名为 evaluate 的方法,该方法将采用 Queue 类型并在经过一些处理后返回一个 double。
我正在尝试使用 Junit 编写一些单元测试,我想知道这个开始是否是最好的方法:
package testSuite;
import static org.junit.Assert.fail;
import java.util.ArrayList;
import org.junit.Before;
import org.junit.Test;
public class ExpressionEvaluationTest {
/**
* Initialise the lists to be used
*/
@Before
public void beforeTest() {
ArrayList<String> exprOne = new ArrayList<String>();
exprOne.add("3");
exprOne.add("+");
exprOne.add("4");
exprOne.add("*");
exprOne.add("2");
exprOne.add("/");
exprOne.add("(");
exprOne.add("1");
exprOne.add("-");
exprOne.add("5");
exprOne.add(")");
exprOne.add("^");
exprOne.add("2");
exprOne.add("^");
exprOne.add("3");
ArrayList<String> exprTwo = new ArrayList<String>();
exprTwo.add("80");
exprTwo.add("+");
exprTwo.add("2");
ArrayList<String> exprThree = new ArrayList<String>();
exprThree.add("2");
exprThree.add("/");
exprThree.add("1");
exprThree.add("*");
exprThree.add("4");
ArrayList<String> exprFour = new ArrayList<String>();
exprFour.add("11");
exprFour.add("-");
exprFour.add("(");
exprFour.add("2");
exprFour.add("*");
exprFour.add("4");
exprFour.add(")");
ArrayList<String> exprFive = new ArrayList<String>();
exprFive.add("120");
exprFive.add("/");
exprFive.add("(");
exprFive.add("10");
exprFive.add("*");
exprFive.add("4");
exprFive.add(")");
ArrayList<String> exprSix = new ArrayList<String>();
exprSix.add("600");
exprSix.add("*");
exprSix.add("2");
exprSix.add("+");
exprSix.add("20");
exprSix.add("/");
exprSix.add("4");
exprSix.add("*");
exprSix.add("(");
exprSix.add("5");
exprSix.add("-");
exprSix.add("3");
exprSix.add(")");
}
@Test
public void test() {
}
}
我打算把它放在 before() 方法中: ShuntingYard sy = new ShuntingYard(/arraylist here/);
然后在测试中,将列表传递给算法。我的问题是,我认为我要走很长的路,有一个参数化注释并将这些列表作为参数列表传递会更好吗?
还有一个问题:如果任何 ArrayLists 的测试通过,那么我确信我可以对 RPNEvaluator 评估方法执行后续测试。我希望我没有模棱两可。
非常感谢您的帮助。
【问题讨论】:
-
注意:您可以缩短列表初始化 ArrayList
exprThree = new ArrayList (Arrays.asList("2","/","1","*","4" )); -
谢谢,我把它们写了很长,这样我就可以练习如何用 vim 拉动、粘贴和导航,以适应重复的控件。
-
我认为您的问题是,“每次使用不同的测试数据多次运行 JUnit 测试的最佳方法是什么?”。对吗?
-
@MikeB 是的,这基本上是我的问题。
-
@BoristheSpider 是的,这就是我想走的路。
标签: java unit-testing junit