Java 在此场景中编写可测试代码
我试图确定编写可测试代码的最佳方式。这是我的密码Java 在此场景中编写可测试代码,java,Java,我试图确定编写可测试代码的最佳方式。这是我的密码 class FileReader { private FileInputStream input; public FileReader(FileInputStream input) { this.input = input; } public void read() throws IOException { Row row = readHeaderRow();
class FileReader {
private FileInputStream input;
public FileReader(FileInputStream input) {
this.input = input;
}
public void read() throws IOException {
Row row = readHeaderRow();
Row[] rows = readOtherRowsBasedOnHeader(row);
doSomethingElse(rows);
}
private void readHeaderRow() {
//..
}
private void readOtherRowsBasedOnHeader(Row row) {
//..
}
private void doSomethingElse(Row[] rows) {
//..
}
}
从上面可以看到,只有read()方法是公共的。其余的方法是私有的。我是否应该将私有方法排除在测试之外?或者将所有方法公开并执行read()在调用代码中所做的操作有意义吗 > P>如果公共方法的测试覆盖了私有方法中的所有代码,则可以安全地考虑类<强>测试< /强> < P>如果公共方法的测试覆盖了私有方法中的所有代码,则如果私有方法的逻辑,则可以安全地考虑类<强>测试< P>(
readHeaderRow
,readOtherRowsBasedOnHeader
,…)非常复杂,需要单独的测试,我建议将FileReader
作为一个较小的类来实现。它类似于:
class FileReader {
private FileHeaderReader headerReader = new FileHeaderReader();
private FileOtherReader otherReader = new FileOtherReader();
//....
private FileInputStream input;
public FileReader(FileInputStream input) {
this.input = input;
}
public void read() throws IOException {
Row row = headerReader.read();
Row[] rows = otherReader.read(row);
//do something else
}
}
class FileHeaderReader {
public Row read() {...}
}
//....
然后您可以编写测试,精确地测试每个部分/类的逻辑。您还可以将
FileHeaderReader
考虑到FileReader
中,这样这些类就不会紧密耦合。如果私有方法的逻辑(readHeaderRow
,readOtherRowsBasedOnHeader
,…)非常复杂,需要单独的测试,我建议将FileReader
作为一个较小的类来实现。它类似于:
class FileReader {
private FileHeaderReader headerReader = new FileHeaderReader();
private FileOtherReader otherReader = new FileOtherReader();
//....
private FileInputStream input;
public FileReader(FileInputStream input) {
this.input = input;
}
public void read() throws IOException {
Row row = headerReader.read();
Row[] rows = otherReader.read(row);
//do something else
}
}
class FileHeaderReader {
public Row read() {...}
}
//....
然后,您可以编写测试,精确地测试每个部分/类的逻辑。您还可以将
FileHeaderReader
考虑到FileReader
中,这样这些类就不会紧密耦合。我的观点是,您应该只测试公共方法。无论来自公共方法的调用如何,都将测试私有方法的使用情况d、 它还可以在不改变测试的情况下使内部重构变得更加容易
您要测试的是类是否履行了它的契约,即公共方法,无论它在内部看起来如何。我的观点是,您应该只测试公共方法。私有方法的使用将通过公共方法的调用进行测试。它还将使内部重构更加容易,而不改变e试验
您要测试的是类是否履行了它的契约,即公共方法,无论它在内部看起来如何。我看到了两个可行的选择
我看到两个可行的选择
您不应该为了编写可测试代码而将方法公开或私有。您可以始终使用反射来测试类的私有方法。Junit/TestNG之类的测试框架是否支持这种基于反射的开箱即用测试?这里有一个链接,其中有一篇关于使用Junit和反射测试私有方法的文章-您应该不要为了编写可测试代码而将方法公开或私有。您可以始终使用反射来测试类的私有方法。像Junit/TestNG这样的测试框架是否支持这种基于反射的开箱即用测试?这里有一个链接,其中有一篇关于使用Junit和反射测试私有方法的文章-我考虑过这一点,但我想如果我继续这样做,我会导致类爆炸。这不是一个通用的解决方案。只是众多解决方案中的一种。始终要用你的头脑来决定哪种方法是最好的。不管怎样,不要害怕有许多类,记住对象组合通常会导致更多的可测试代码。我考虑过这一点,但我认为如果我继续这样做,我会导致类爆炸。这不是一个通用的解决方案。只是众多解决方案中的一种。始终要用你的头脑来决定哪种方法是最好的。不管怎样,不要害怕有许多类,记住对象组合通常会导致更多的可测试代码。好的,非常有效的答案。好的,非常有效的答案回答。