gpt4 book ai didi

java - 如何以正确的方式进行测试驱动开发?

转载 作者:搜寻专家 更新时间:2023-10-31 20:01:25 25 4
gpt4 key购买 nike

我已经阅读了有关 TDD 的内容,并在我的新项目中尝试了它。

TDD cycle

我知道在 TDD 中它就像黑盒测试,即重要的是什么而不是如何。所以,在阅读许多帖子后,我得出结论并停止测试私有(private)方法,因为它不是正确的方法。

但是,由于这些原因,我没有做到。

我将通过示例向您展示:我有一个读取文本段落的程序,所以我在我的测试方法中写了这样的东西(对于 tdd step1)。

/*
My program reads a textual paragraph from file and saves it to my custom paragraph object;
*/

因此,我使用这种方法来创建 RED 案例。

public void paragraphMustNotBeNullTest(){
File f = new File("some path")
ParagraphReader reader= new ParagraphReader();
reader.read();
assertNotNull("my custom paragraph is null",reader.getCustomParagraph());
}

我写了下面的代码:

package com.olabs.reader;

import java.io.FileInputStream;
import java.io.InputStream;

import com.olabs.models.OlabsParagraph;

public class Para {


private String paragraphText = null;
private Paragraph oParagraph = null;

public Paragraph getCustomParagraph() {
return oParagraph;
}
public void setoParagraph(Paragraph oParagraph) {
this.oParagraph = oParagraph;
}

public void read() {
InputStream is = new FileInputStream("abc......");
// ..
String text = is.read(); // assume I got text read from file.
this.paragraphText = text;
}


private void createCustomParagraph()
{
Paragraph p = new Paragraph();
p.setText(paragraphText);
p.setId(1);
p.setType("Story");
...........
}

private void countWords()
{
// counting words in paragraph logic
}


}

现在的问题是我事先知道我将使用 countingwordscreateCustomParagraph 作为私有(private)方法。

那么,在那种情况下我应该选择:

  1. 将它们创建为公开并遵循 tdd 周期。

  2. 将它们设为私有(private)。

  3. 删除它们的测试(因为这些方法现在是私有(private)的,测试无法访问)。我认为这是执行 tdd 的非常麻烦且不正确的方法。

我对此感到困惑。每个人都说只有在你写了一个失败的测试之后才写代码,但在这里如果我知道我要写一个私有(private)方法那么我将如何做呢?

如果我在某处有误,请您纠正我。另外,如果可能的话,请给出一些真实的例子......

此外,我担心大多数时候我会因为访问说明符问题或重构而编辑测试或删除它们 ...

注意:这不是重复的问题。对于实时情况,我没有很好的答案。在我见过的所有示例中,它们只显示一个带有默认或公共(public)访问说明符的类,因此它们实际上没有显示在实时项目中如何工作。

最佳答案

根据我的个人经验,您正在通过应用程序的其余部分测试类和类的接口(interface)。你的 TDD 测试用例应该针对类的公共(public)方法编写。关键是要测试在受到刺激时,类会输出所需的结果以通过您的测试标准。内部私有(private)方法将作为公共(public)接口(interface)测试的一部分进行测试,但目标是验证可公开访问的接口(interface)是否正常工作。您说您提前知道将使用私有(private)方法,但是如果有人在不更改外部行为的情况下重构类中的工作方式,您仍然可以使用现有测试并验证重构没有破坏以前的工作方法。

关于java - 如何以正确的方式进行测试驱动开发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31438065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com