我正在尝试使用jUnit测试每个开关/案例块,但我不确定如何让每个TestCase对应不同的开关/案例。
我目前在MenuTest.java中有以下代码:
package com.cw.hospital.test;
import org.junit.Test;
import org.junit.Assert;
import com.cw.hospital.Menu;
public class MenuTest {
Menu MainMenu;
public MenuTest() {
super();
MainMenu = new Menu();
}
@Test
public void Case1() {
}
@Test
public void Case2() {
}
@Test
public void Case3() {
}
}
我的Menu类(类im测试)有一个main()方法。在该方法内部,我正在读取用户输入,然后切换该输入。
如何将Test类的不同输入发送到菜单?
答案 0 :(得分:0)
在setup方法中创建类的实例(使用@Before注释)并将参数传递给main方法。这里的关键是你想要测试的。如果您展示您的课程,我可以通过更多提示更新答案。
编辑:如果你真的想要对你的主要方法进行单元测试,你将不得不模拟你的Flight类。如果Flight类中调用的方法返回了某些内容,则必须告诉模拟框架相应地返回内容。
答案 1 :(得分:0)
如果你将I / O内容和输入消耗分开,那么测试内容会更容易。我的意思是把I / O的东西放在某个地方(也许在你的主要部分),然后创建一个方法,将输入作为参数(也许是一个String)。
然后从JUnit测试中调用消耗方法,其参数值强制切换语句中的路径。例如:
[in the class under test]
void methodName()
{
String theInput;
... perform I/O and populate "theInput"
consume(theInput);
}
void consume(final String input)
{
switch (someting based on input)
{
...
}
}
[in your junit]
@Test
testConditionOne()
{
consume("force condition one");
}
@Test
testConditionTwo()
{
consume("force condition two");
}
... etc.
答案 2 :(得分:0)
模拟用户输入可以使用System.setIn();并且你可以传递一个PipedInputStream来传递你要测试的输入案例
public class MenuTest {
OutputStream stdIn;
InputStream stdOut;
Menu MainMenu;
public MenuTest() {
super();
PipedInputStream in = new PipedInputStream();
stdIn = new PipedOutputStream(in);
System.setIn(in);
PipedOutputStream out = new PipedInputStream();
stdOut = new PipedInputStream(out);
System.setOut(out);
MainMenu = new Menu();
}
//...
}
你会想要使用一个单独的线程传递输入,因为main方法将阻塞,直到它可以读取某些内容
可以采取类似的措施来捕获System.out输出