Gur*_*epS 3 nunit unit-testing
我有一个通过WMI安装软件驱动程序的类.但是,我注意到在编写单元测试时,为了执行断言,我需要额外的辅助方法.例如,为了确保添加驱动程序,我需要确保驱动程序的数量增加了一个,这不是被测试类中的方法.
单元测试这是正常的,还是我做错了什么?我将采用所有这些辅助方法并将它们提取到静态类.
谢谢
这听起来像是在进行集成测试而不是单元测试,因为它看起来像是在使用被测试类的真正依赖项(安装程序类).在单元测试中,您将注入模拟或存根来模拟依赖项.
集成测试通常需要更多的单元测试设置,因为他们需要
我将为您提供单元,集成和端到端测试的定义,因为它可能与其他人的定义不同.无论我的定义如何,测试您可以安装产品是一项非常有效的测试.所以以下只是我(可能是错误的)观点.
单元测试是完全隔离的,可以在没有任何外部依赖性的情况下运行,例如数据库,文件系统,外部Web服务,触发器(如cron作业)等.对象的所有对等体都可以外部化(模拟或存根),以便测试尽可能只关注测试被测试的类,而不是它的依赖关系.
测试抽象外部资源的类.对我来说,集成测试非常注重单元测试,但需要外部(通常很慢)资源,并且可能因资源故障而失败.
使用应用程序界面执行功能测试,以类似生产的模式配置.应用程序界面可能是桌面应用程序,Web UI,Web服务,串行端口等.此处的关键是测试涵盖所有组件如何交互在一起(协议).这些通常是迄今为止最慢的测试.
我觉得你正在进行集成测试,因为你只测试一个执行安装的类,但它可能是一个端到端的测试,取决于你正在使用的接口.
让我举一个我当前项目的例子.其中一项功能包括从视频文件中提取音频.为此,我调用了一个名为FFmpeg的命令行工具.为了能够测试代码,我将调用命令行的代码与不同类中的业务逻辑分开,这样我就可以通过传递一个模拟的AudioExtractor对业务逻辑进行单元测试.现在,音频提取器的测试是"集成测试",因为我只测试该类,并且该类需要和外部资源ffmpeg二进制文件安装在计算机上.
Audio Extracto测试有点复杂,因为它必须检查
我通过自定义的hamcrest匹配器(最后是帮助类)进行大部分检查.哦,需要记住的是,如果其中一个前提条件失败,则并不意味着代码被破坏,而是测试无法运行,这是一个警告而不是错误.
我认为重要的是测试应该描述交互并保持正确的抽象级别,这可能是你通过介绍帮助程序所做的.