【问题标题】:Alternate ways to MSTest that a string does not contain字符串不包含的 MSTest 的替代方法
【发布时间】:2016-12-26 18:59:23
【问题描述】:

我正在使用 TDD 在 C# 中编写一个诅咒词审查系统,并且由于我对实现 TDD 相当陌生,我想知道是否有替代或更好的方法来完成确保返回字符串不包含的任务诅咒词及其变体。由于这是一个公共论坛,我将代码中的实际诅咒词替换为干净的词,所以假设我正在尝试为这篇文章审查更干净的版本:

[TestMethod]
        public void process_CensorCode_GivenJerkface_ReturnsStringWithoutJerkface()
        {
            //ACT
            string result = proc.process("Jerkface you Jerkfacing Jerkfacer &*E@*Jerkface391!!", PROCESS_CODE.CENSOR);
            //ASSERT
            Assert.IsFalse(result.Contains("Jerkface"));
        }

显然,我的程序还考虑了 jerkface、jerKfAcE、jERKfaCe 等......我想测试所有这些。我是否需要为 MSTest 中的每一个变体编写一个方法,或者是否有一些捷径可以在单个测试中处理所有这些变体?如果您发现我的测试的任何其他方面可以改进,也请说出来。顺便说一句,我已经在 TestClass 的顶部使用以下内容进行了初始化:

[TestInitialize]
        public void Initialize()
        {
            //ARRANGE
            proc = new RegExProcessor();
        }

【问题讨论】:

标签: c# unit-testing tdd mstest


【解决方案1】:

nUnit 具有此场景的 TestCase 属性。它可以通过以下方式使用:

[Test]
[TestCase("Jerkface")]
[TestCase("jerKfAcE")]
//[TestCase("...")]
public void process_CensorCode_GivenJerkface_ReturnsStringWithoutJerkface(string checkedWord)
{
    //ACT
    string result = proc.process("Jerkface you Jerkfacing Jerkfacer &*E@*Jerkface391!!", PROCESS_CODE.CENSOR);
    //ASSERT
    Assert.IsFalse(result.Contains(checkedWord));
}

要使用 MSTest 实现它,您应该付出更多的努力,因为 MSTest 仍然不支持这种简单形式的测试用例。这个answer 详细介绍了如何使用 MSTest 完成它。

【讨论】:

  • 如果可能的话,听起来 NUnit 是最干净的方法,而且它是......你有没有让 NUnit 的适配器可靠地与 NUnit 3 一起工作?过去我有一些错误,测试不会全部运行。
  • 对测试用例的支持是我更喜欢 NUnit 而不是 MSTest 的原因之一。至于适配器 - 我正在使用 ReSharper 测试运行器。
猜你喜欢
  • 2010-12-15
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
  • 1970-01-01
  • 2012-11-20
  • 2017-08-31
  • 2011-03-10
  • 1970-01-01
相关资源
最近更新 更多