我有一个名为Menu.java的类,它被用作我程序的接口。
在这个Menu.java类中,我有一个开关/案例块作为我的菜单选项。
基本上,我想使用jUnit来测试该switch / case块中每个case的输出,但是我很难找到最好的方法。
最好为每个菜单操作分配一个单独的jUnit TestCase吗?然后使用单个TestUnit来运行所有案例?或者有更好的方法可以做到吗?
非常感谢。
答案 0 :(得分:3)
通常,每个类都有一个相应的测试类。所以你会有一个MenuTest.java来匹配你的Menu.java。这使您可以快速找到与特定文件关联的测试,因为命名约定。
然后,理想情况下,每个测试都有一个与之相关的测试方法。因此,如果你的交换机有10个案例,你最终会得到10个测试方法,每个案例一个。这使您可以快速隔离失败的选项,因为您可以单独获得每个测试的反馈。
请注意,TestCase是JUnit 3.如果可能,请使用JUnit 4测试(org.junit。*),这些测试使用@Test注释进行注释。
答案 1 :(得分:1)
我会为每个可能的工作流使用单个测试用例。理想情况下,每个测试用例都会有一个断言,遵循该指南可能更容易。一般来说,您希望保持单元测试的简洁。
然后我会将所有测试用例放在同一个测试类中,只要它们属于同一个测试类。
答案 2 :(得分:1)
我为Menu.java(MenuTest.java)创建了一个类。我会为每个菜单选项编写一个测试用例。如果您有GUI内容,请将其与逻辑分开。
无需测试GUI或其管道。
答案 3 :(得分:0)
如果您正在测试的方法是为此交换机接收不同的参数,请考虑使用参数化测试用例。优点是,如果您的交换机发生变化,更容易跟踪需要更改的内容:
以下是TestNG的工作原理(查看JUnit的“参数化测试用例”)
// This method will provide data to any test method that declares that
// its Data Provider is named "test1"
@DataProvider(name = "test1")
public Object[][] createData1() {
return new Object[][] {
{ "Foo", new Integer(36) },
{ "Bar", new Integer(37)},
};
}
// This test method declares that its data should be supplied by the
// Data Provider named "test1"
@Test(dataProvider = "test1")
public void verifyData1(String n1, Integer n2) {
System.out.println(n1 + " " + n2);
}
答案 4 :(得分:-2)
在您的情况下,我会为所有选项使用单个测试用例。你需要这样的东西:
import org.junit.Test;
import org.junit.Assert;
import your.project.Menu;
public class MenuTest {
@Test
public void testCase() {
Menu menu = new Menu();
assertEquals("1",menu.runCase("bar"));
assertEquals("2",menu.runCase("foo"));
//etc
}
}