我让visual studio为我班上的每个成员创建一个测试。这是一个例子:
/// <summary>
///A test for CloseCurrentTextLogFile
///</summary>
[TestMethod()]
public void CloseCurrentTextLogFileTest()
{
Logger.CloseCurrentTextLogFile();
Assert.Inconclusive( "A method that does not return a value cannot be verified." );
}
基于断言字符串,我想知道如何测试这个...任何想法?
答案 0 :(得分:3)
我认为如果它真的不可测试,那么它实际上根本不做任何事情,并且不应该存在;) 有些事情可能有用......
Assert.IsNotNull( Logger.File );
Logger.CloseCurrentTextLogFile();
Assert.IsNull( Logger.File );
或者检查Logger.FileOpenStatus
的状态或检查Logger.OpenFile(fname)
在关闭之前是否抛出异常,但不是之后。 Logger
中必须有一些内容,其行为取决于CloseCurrentTextLogFile()
执行的任何操作。
答案 1 :(得分:3)
静态状态方法自然会让自己变得不可测试,所以我的建议是基于从静态方法重构代码。
我会将Logger变成一个在构造函数中接受IO对象的实例类。这将允许您存根IO对象,并且您可以断言已调用IO对象的Close
方法。
仅当您希望使代码100%可测试时才这样做。否则,我同意莫,如果它不可测试,那么不要写强制测试...那些往往非常脆弱。最后,您需要对您的代码务实。通常记录器对于保持静态是有用的,但正如我已经提到的,这些往往是非常不稳定的....所以只是务实你的工作并且不要仅仅为了获得100%的代码覆盖而编写测试。那将是100%的价格......
<强>更新强>
这就是为什么这个单元测试的教条POV无法真正测试的原因。您没有测试工作单元,而是测试Logger AND Logger的依赖项(在本例中为IO对象)。它还使您的测试变慢并且需要环境设置和状态(您必须首先打开一个实际文件来关闭它,对吧?)。这些都不适合单元测试,但是对于集成测试来说还不错......所以这取决于你正在编写什么样的测试。
答案 2 :(得分:2)
您可以检查Logger
的状态,或者您可以在记录器上调用一些不会产生错误的方法,因为您调用了此方法,如果您没有调用该方法,该方法应该会成功。
答案 3 :(得分:2)
我也不确定,但您可以尝试以下方法: 一个函数应该做某事(写一个文件,设置一些变量等) 也许您可以检查变量是否已被写入,或者文件是否已创建。
答案 4 :(得分:1)
您可以模拟Logger
类并断言正在调用CloseCurrentTextLogFile
。有些人可能会争辩说你需要检查是否已关闭任何打开的日志文件,我个人不同意这一点,因为这会测试Logger
本身而不是你的方法。
这是开发人员在开始设计系统时应该问自己的问题,如何测试我的应用程序。