c# - 单元测试无效方法?

标签 c# unit-testing void

对不返回任何内容的方法进行单元测试的最佳方法是什么?特别是在 c# 中。

我真正想要测试的是一种获取日志文件并针对特定字符串解析它的方法。然后将字符串插入数据库。没有什么以前没有做过的,但对 TDD 来说是非常新的,我想知道是否有可能对此进行测试,或者它是否真的没有经过测试。

最佳答案

如果一个方法没有返回任何东西,它是以下之一

  • 命令式 - 你要么要求对象对自己做某事......例如改变状态(不期望任何确认......它假设它会完成)
  • 信息性 - 分别通知某人某事发生了(不期望采取行动或回应)。

命令式方法 - 您可以验证任务是否实际执行。验证状态更改是否实际发生。例如

void DeductFromBalance( dAmount ) 

可以通过验证此消息后的余额是否确实小于初始值dAmount来测试

信息方法——作为对象公共(public)接口(interface)的成员很少见……因此通常不进行单元测试。但是,如果必须,您可以验证是否对通知进行了处理。例如

void OnAccountDebit( dAmount )  // emails account holder with info

可以通过验证电子邮件是否正在发送来进行测试

发布有关您的实际方法的更多详细信息,人们将能够更好地回答。
更新:您的方法正在做两件事。我实际上将它分成了现在可以独立测试的两种方法。

string[] ExamineLogFileForX( string sFileName );
void InsertStringsIntoDatabase( string[] );

String[] 可以通过为第一种方法提供虚拟文件和预期字符串来轻松验证。第二个有点棘手.. 您可以使用模拟(谷歌或在模拟框架上搜索 stackoverflow)来模拟数据库或点击实际的数据库并验证字符串是否插入了正确的位置。检查this thread对于一些好书......如果你正处于紧缩状态,我会推荐 Pragmatic Unit Testing。
在代码中它会像

InsertStringsIntoDatabase( ExamineLogFileForX( "c:\OMG.log" ) );

关于c# - 单元测试无效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/246038/

相关文章:

javascript - 如何用 Jest 测试 void 方法

c# - knockout -获取分页数据,初始加载

c# - EF linq/lambda .contains(list[String])?

c# - 生成器模式 : What is the purpose of the Director?

c# - 强制 PrincipalContext 连接到特定服务器

iphone - 为 mac 单元测试运行谷歌工具包时出错

unit-testing - 如何为 netbeans 中的单元测试生成 javadoc

python - 方法Python中的测试方法

c++ - Visual C++ 说 void 函数需要返回一个值

c++ - 带空的算术运算?