Dav*_*ank 1 java testing unit-testing
我可能会问一些完全明显的事情.我在编写单元测试方面没有太多经验,并且出现了以下问题让我思考.
比如,你有一个类,这个类有你想要测试的方法.但是你能一次测试一种方法吗?我想不是.为了测试该方法,您需要调用一个或多个其他方法.例如:
class MyClass {
int x;
void foo() { x = 4; }
boolean bar() { x = 3; }
boolean check() { return x == 4; }
}
Run Code Online (Sandbox Code Playgroud)
为了测试foo和bar,我需要使用check(),另一方面,为了测试检查,我需要使用foo()或bar().
说,我必须遵循测试用例:
class MyClassTest {
@Test
void testFoo() {
MyClass obj = new MyClass();
obj.foo();
assert obj.check();
}
}
Run Code Online (Sandbox Code Playgroud)
现在让我们假设,我的同事更改了check()方法:
boolean check() { return x == 5; }
Run Code Online (Sandbox Code Playgroud)
当然,testFoo()会失败,有人可能会认为foo方法存在问题.
所以这看起来像鸡蛋情况.人们通常如何解决这个问题?
这里独立测试方法可能没什么意义,因为类的状态可以根据调用的方法顺序而改变.在这种情况下,我会确保行为 - 或状态转换 - 按预期工作.请参考以下三个正确指定类的行为的测试:
class WhenFooWasCalled {
@Test
public void ThenCheckShouldReturnTrue {
MyClass sut = new MyClass();
sut.foo();
assertTrue(sut.check());
}
}
class WhenBarWasCalled {
@Test
public void ThenCheckShouldReturnFalse {
MyClass sut = new MyClass();
sut.bar();
assertFalse(sut.check());
}
}
class WhenNothingWasCalled {
@Test
public void ThenCheckShouldReturnFalse {
MyClass sut = new MyClass();
assertFalse(sut.check());
}
}
Run Code Online (Sandbox Code Playgroud)
更新:我添加了第三个测试用例:如果没有调用foo()和bar(),check()的行为如何.
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |