我是TDD的新手,我很困惑!
我的第一个问题是测试如何导致使用您想要的名称声明变量?
例如,如果我的测试中有一些代码,请说
public class someTest {
@Test
public void test(){
new someMethod(1,0);
}
}
那么,有没有办法在测试中命名变量?
我的第二个问题是,我是否希望该方法执行System.out.print(“Some error”),因为其中一个变量值,然后返回测试需要包含的内容?
我完全迷失了。所以任何帮助都表示赞赏。
答案 0 :(得分:2)
暂时忘掉TDD吧。如果您先从界面或类开始,您会如何考虑测试?这就是我要做的事情:从我的班级开始。
public class Foo {
private String message;
public Foo(String m) { this.message = m; }
public String getMessage() { return this.message; }
public static int add(int x, int y) { return x*y; }
}
然后我为它写了一个JUnit测试:
public class FooTest {
@Test
public void testConstructor() {
String expected = "Hello";
Foo f = new Foo(expected);
Assert.assertEquals(expected, f.getMessage());
}
@Test
public void testAdd() {
int expected = 5;
Assert.assertEquals(expected, Foo.add(2, 3));
}
}
我运行此测试并立即发现我的添加实现存在问题。
那么TDD做什么?他们将事情发挥到极致:首先编写测试,然后编写课程。您尝试编译测试并且失败,因为您没有编写该类。一旦有了类实现,就可以为每个方法维护一个紧密的代码测试循环,保持100%的传递和良好的覆盖率,包括快乐路径,错误条件和边缘情况。
TDD并不意味着你不知道你要编写和测试的课程。在开始之前,您应该了解所需的API。就我个人而言,我认为要求你在课前愚蠢之前编写测试。画出课程,在测试之前不要走得太远。写一个方法,测试它,写另一个。
顺便说一句:如果你在没有Assert
的情况下编写JUnit测试,那么你做错了。不要写信给System.out
。通过或不通过判断不应取决于您的目视检查;它应该自动断言和确定。
答案 1 :(得分:0)
您不应该关心正在创建的特定变量。如果您正确编写的测试描述了您想要的行为,并且您的实现可以按照您的意愿工作,那么为什么要关注它内部的变量?最终,您将被迫创建一些变量以满足后续测试之一。它的名称不应该被测试 - 这是实现细节,测试不应该依赖它。