微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

单元测试 – 每个单元测试多少次?

每个单元测试应该检查多少?比如我有这个测试

[TestMethod]
public void IndexReturnsAView()
{
    IActivityRepository repository = GetPopulatedRepository();
    ActivityController activityController = GetActivityController(repository);
    ActionResult result = activityController.Index();
    Assert.isinstanceOfType(result,typeof(ViewResult));
}

并且

[TestMethod]
public void IndexReturnsAViewWithAlistofActivitiesInModelData()
{
    IActivityRepository repository = GetPopulatedRepository();
    ActivityController activityController = GetActivityController(repository);
    ViewResult result = activityController.Index() as ViewResult;
    Assert.isinstanceOfType(result.ViewData.Model,typeof(List<Activity>));
}

显然,如果第一次测试失败,那么第二次测试也会失败,那么这两次测试应该合并为一次测试吗?我的感觉是,测试越精细,每个测试检查越少,找到失败原因的速度就越快.但是,进行大量非常小的测试会产生开销,这可能会花费时间来运行所有测试.

解决方法

我建议尽可能地分解它们.

有很多原因,恕我直言,最重要的是:

>当您的某个测试失败时,您希望能够尽可能快速,安全地隔离出错的确切内容.让每个测试方法只测试一件事是实现这一目标的最佳方法.
>每个测试都需要从一个干净的平板开始.如果您创建一次存储库然后在2个或更多测试中使用它,那么您对这些测试的顺序具有隐式依赖性.假设Test1将一个添加到存储库但忘记删除它. Test2的行为现在会有所不同,并可能导致您的测试失败.唯一的例外是不可变数据.

关于你的速度问题,我不担心.对于像这样的纯代码运算,.NET非常快,你永远无法区分它们.一旦你摆脱了代码处理和数据库之类的问题,你就会感觉到性能问题,但是一旦你这样做,就会遇到如上所述的所有“干净的问题”,所以你可能只是必须忍受它(或尽可能多地使你的数据不变).

祝你的测试好运.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐