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

我真正想测试的是一个方法,它接受一个日志文件并解析它的特定字符串。然后将字符串插入到数据库中。没有什么是以前没有做过的,但对于TDD来说是非常新的,我想知道是否有可能测试这个,或者它是没有真正测试过的东西。


当前回答

无论你使用什么实例来调用void方法,你可以使用,验证

例如:

在我的例子中,它的_Log是实例,LogMessage是要测试的方法:

try
{
    this._log.Verify(x => x.LogMessage(Logger.WillisLogLevel.Info, Logger.WillisLogger.Usage, "Created the Student with name as"), "Failure");
}
Catch 
{
    Assert.IsFalse(ex is Moq.MockException);
}

验证是否由于测试将失败的方法失败而抛出异常?

其他回答

一如既往:测试该方法应该做什么!

它是否应该在某个地方改变全局状态(哎呀,代码味道!)?

它是否应该调用接口?

当使用错误的参数调用时,它是否会抛出异常?

当使用正确的参数调用时,它是否不抛出异常?

应该……吗?

使用Rhino mock来设置可能预期的调用、操作和异常。假设您可以模拟或去掉方法的某些部分。如果不了解关于方法甚至上下文的一些细节,就很难知道。

无论你使用什么实例来调用void方法,你可以使用,验证

例如:

在我的例子中,它的_Log是实例,LogMessage是要测试的方法:

try
{
    this._log.Verify(x => x.LogMessage(Logger.WillisLogLevel.Info, Logger.WillisLogger.Usage, "Created the Student with name as"), "Failure");
}
Catch 
{
    Assert.IsFalse(ex is Moq.MockException);
}

验证是否由于测试将失败的方法失败而抛出异常?

测试它的副作用。这包括:

它会抛出任何异常吗?(如果应该的话,检查一下。如果不应该,尝试一些角落的情况,如果你不小心,可能会- null参数是最明显的事情。) 它能很好地处理参数吗?(如果它们是可变的,它是否会在不应该的时候改变它们,反之亦然?) 它是否对正在调用它的对象/类型的状态有正确的影响?

当然,您可以测试的内容是有限的。例如,您通常不能对每个可能的输入进行测试。实用的测试——足够让你相信你的代码设计得当,实现正确,并且足够作为调用者可能期望的补充文档。

试试这个:

[TestMethod]
public void TestSomething()
{
    try
    {
        YourMethodCall();
        Assert.IsTrue(true);
    }
    catch {
        Assert.IsTrue(false);
    }
}