最近MVC项目做单元测试,做的有点晕了。
网上看到这点:单元测试是最小的测试单元了,就是针对一个方法的。
假设一个场景:类AB中有 A方法里调用了B方法,如下:
public class AB { public bool A(bool isSuccess) { B(); return isSuccess; } public void B() { } }
现在 要针对方法A 进行单元测试。
[TestMethod()] public void ATest() { AB ab = new AB(); bool result = ab.A(true); Assert.AreEqual(true, result); }
疑问:
1.A方法调用了B方法,如果B方法发生异常,导致A方法的单元测试没有通过,
这种情况下单元测试失败了,是否能说明A方法有问题?(我觉的A方法本身没有问题,是B方法的问题)
2.如果发生上面的情况,单元测试,其实并没有测试出是B方法的问题,实际项目中,一个方法里跟N多对象和方法有关,这样的单元测试是不是没有什么意义,它找不出具体的问题出在哪里,要单元测试何用?
3. 想到 电灯和 开关的例子,要测试电灯是否是好的,首先要保证开关是好的,如果开关都不能保证好的,灯没亮,就不知道是灯的问题还是开关的问题。
同理,如果B方法不能保证能正常通过,那么说单元测试A方法将没有用,或者说A方法是不可测试的,可不可以这样说?
4.Mock对象就是模拟对象,模拟环境,我对这个Mock对象的理解是去模拟那些可能会导致失败的外部环境。如A方法,依赖B方法,Mock对象应该去模拟B方法,如果模拟不了,就是说A方法可测试性差,或者不能测试。 不知道能不能这样理解? (如果真是这样的话,那就是好多方法都无法单元测试了)
望各位园友 指点一下,在这谢谢啦!
呼如林
达令说