为了账号安全,请及时绑定邮箱和手机立即绑定

求救:单元测试疑惑

求救:单元测试疑惑

浮云间 2018-11-21 15:17:01
最近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方法可测试性差,或者不能测试。 不知道能不能这样理解? (如果真是这样的话,那就是好多方法都无法单元测试了) 望各位园友 指点一下,在这谢谢啦!
查看完整描述

2 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

其实你已经差不多找到问题的原因了.对这就是A方法可测试性差,它绝对依赖于B方法的具体实现.而不是它的抽象.

可测试性也是代码好坏的其中一个标准.很多不选择Web Form的原因也是它的可测试性差.当代码可测试性差时,你在单元测试里怎么搞也是没用的.

所以这时应该是重构,使其有更好的可测试性.

至于具体你上面的方法,不明白你为什么要在A里调用一个void的方法.所有也没有更好的重构建议.


查看完整回答
反对 回复 2018-11-25
?
达令说

TA贡献1821条经验 获得超6个赞

如果单元测试不能解决这样的问题,那么单元测试的实用性就很差了吧……




查看完整回答
反对 回复 2018-11-25
  • 2 回答
  • 0 关注
  • 393 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信