【发布时间】:2013-04-17 17:45:18
【问题描述】:
我正在尝试了解如何测试用户的输入(请注意,我不是在尝试进行模拟测试,而是对实际用户输入的测试)
目前,正如您在我的程序中看到的那样,我已经对我的测试用例的值进行了硬编码,并且它通过了所有测试,但是我怎样才能获得用户的输入并对其进行测试。
当我在测试类中创建 MyClass1 的实例时,有没有一种方法可以在我的构造函数中调用 System. 并传递它?
如果可能的话,请给我一些示例代码,以便我更好地理解。
如果我有这样的界面
public interface IMyClass{
public int getvalue1();
public int getvalue2();
public int getvalue3();
}
然后是接口实现
public class MyClass1 implements MyClass{
private int _value1 = 0;
private int _value2 = 0;
private int _value3 = 0;
public MyClass1(int number1, int number2, int number3)
{
_value1 = number1;
_value2 = number2;
_value3 = number3;
}
public void setLength1(int value1)
{
_value1 = value1;
}
public void setLength2(int length2)
{
_value2 = value2;
}
public void setLength3(int length3)
{
_value3 = value3;
}
public int getValue1()
{
return _value1;
}
public int getValue2()
{
return _value2;
}
public int getValue3()
{
return _value3;
}
}
最后是这样的测试类:
public class ClasTest extends TestCase {
public void testNumbers()
{
MyClass1 numbers= new MyClass1(1,2,3);
assertThat(numbers.getValue1(),is(not(numbers.getValue2())));
}
}
谢谢,感谢您的帮助。
【问题讨论】:
-
MVC,MVP?有什么设计模式吗?
-
从测试的角度来看,您在测试中所做的就足够了。唯一可能的方法是随机生成输入并根据该随机输入进行测试。
-
为什么不在您的测试中使用硬编码值?您只需要考虑特殊情况(如 Integer.MAX_VALUE、0 等边界)还混合了一些正数和负数,也许这就足够了。这个基本案例应该涵盖所有其他案例。
-
是的,但我该如何测试呢?
-
究竟测试什么?您没有显示任何涉及用户输入的测试代码。以任何方式(System.in、Scanner 等)从控制台读取单元测试本身并不是单元测试的工作方式——单元测试应该是自动化的,而不是依赖于人工交互。
标签: java unit-testing