c# - 如何在 NUnit 2.5 中使用 TestCase?

标签 c# unit-testing nunit testcase

我有一个 Currency 类,我使用 NHibernate 将它保存到我的数据库中。 Currency 类如下所示:

public class Currency : Entity
{
    public virtual string Code { get; set; }
    public virtual string Name { get; set; }
    public virtual string Symbol { get; set; }        
}

我已经使用 [TestCase] 编写了单元测试,如下所示:

    [TestCase(6,Result = new Currency ({ Code="GBP", Name="British Pound", Symbol="£"}))]
    public Currency CanGetCurrencyById(int id)
    {
        ICurrencyRepo currencies = new RepoFactory().CreateCurrencyRepo(_session);
        Currency c = currencies.GetById<Currency>(id);

        return c;
    }

我知道这是错误的,但我不确定如何写。结果可以是一个对象吗?

最佳答案

属性参数(对于 Result)必须是常量表达式。您不能像现在这样创建对象。

使用 TestCase 属性适用于需要验证多个简单输入/输出的测试用例。在你的场景中,你可以做这样的事情(也就是说,如果你只打算验证 id-code 映射是否正确):

[TestCase(6, Result = "GBP")]
[TestCase(7, Result = "USD")]
[TestCase(8, Result = "CAD")]
public string CanGetCurrencyById(int id)
{
    ICurrencyRepo currencies = new RepoFactory().CreateCurrencyRepo(_session);
    Currency c = currencies.GetById<Currency>(id);

    return c.Code;
}

另外,看看 TestCase documentation - 他们提供了很好的例子。

编辑: 通过映射测试,我的意思是验证您的 ORM 映射(NHibernate 到数据库)是否正确并按您的预期工作。您通常会在以下场景中进行测试:

  1. 创建具有预定义值的新实体实例(例如。Currency)
  2. 开始新交易
  3. 保存实体(Save + Flush + Evict 组合以确保 NHibernate 不再将保存的实体存储在缓存中)
  4. 检索实体
  5. 将检索到的值与预定义值进行比较
  6. 回滚事务

如果这样的测试随后通过,它或多或少地告诉您我可以用这些值保存这个实体,然后我可以用完全相同的值检索它。这就是您想要知道的全部 - 映射是正确的。

使用 TestCase 属性,验证整个对象的正确性是相当困难的 - 它意味着测试简单的东西。您可以使用其他答案中建议的解决方法(通过 TestCase 传递参数),但它很快变得不可读且难以维护(想象具有 6 个以上属性的实体需要验证)。

我建议将您的测试分成一个验证 idcode 的映射是否正确的测试(但是我认为这样做没有什么意义,除非您总是 计划将某些 id 映射到某些代码)和另一个验证 Currency 实体是否正确映射到数据库表。

关于c# - 如何在 NUnit 2.5 中使用 TestCase?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8869734/

相关文章:

c# - 请求被中止 : Could not create SSL/TLS secure channel - IllegalMessage

unit-testing - Jacoco覆盖率报告,从覆盖范围中排除方法

.net - 处理 IEnumerable<T> 时 NUnit Assert.AreNotEqual 的行为不正确?

c# - 如何在 C# 中模拟 NestClient DebugInformation?

c# - Telerik RadDocument 表大小问题

c# - 如何使用中间 API 传递 JSON 对象?

c# - 当服务器和客户端在同一台机器上时收听广播

javascript - 测试调用 API 的 redux 操作

Python Django 测试两个异常之一

c# - 真正基本的最小起订量示例失败