我的问题很简单(与更有经验的开发者可能也知道):单元测试UI方法
我如何单元测试这个方法(我知道,没有一种方法,因为它不是在一个班,但让假设它是)?
void drawRegularPolygon(int numberOfPoint, Point centerPoint, double radius)
{
double angleDelta = 2 * PI/numberOfPoint;
Point firstPoint = new Point(centerPoint.x + radius, centerPoint.y);
for (int i = 1; i < numberOfPoint; i++) {
double angle = angleDelta * i;
Point secondPoint = new Point(centerPoint.x + radius * cos(angle), centerPoint.y + radius * sin(angle));
DrawLine(firstPoint, secondPoint);
firstPoint = secondPoint;
}
}
我接受的回答说:“你应该重构这个样子this
甚至考虑测试之前”。
编辑1: 我刚刚在我的代码中发现了一个错误,但我留在那里有一个单元测试应该如何捕捉它的想法。
编辑2: 我也想过另一种解决方案
Array<Line> regularPolygonLines(int numberOfPoint, Point centerPoint, double radius)
{
Array<Line> lines = new Array<Line>;
double angleDelta = 2 * PI/numberOfPoint;
Point firstPoint = new Point(centerPoint.x + radius, centerPoint.y);
for (int i = 1; i <= numberOfPoint; i++) {
double angle = angleDelta * i;
Point secondPoint = new Point(centerPoint.x + radius * cos(angle), centerPoint.y + radius * sin(angle));
lines.add(new Line(firstPoint, secondPoint));
firstPoint = secondPoint;
}
return lines;
}
void drawRegularPolygon(int numberOfPoint, Point centerPoint, double radius)
{
Array<Line> lines = regularPolygonLines(numberOfPoint, centerPoint, radius);
for (Line line in lines) {
DrawLine(line.firstPoint, line.secondPoint);
}
}
,并在这其中,regularPolygonLines
方法可以检测,但drawRegularPolygon
不能。
你在正确的轨道上你拉出*计算*并隔离*渲染*。事实上,计算可以被测试,您可以将其视为用户界面的“业务规则”。它也有助于SRP和清晰度。 – toddmo 2015-03-10 17:20:12