0

有谁知道 NSpec 或类似的替代品是否仍然有效?

最近在 Scala 世界中待了一段时间,当我回到 C# 时,我突然发现 C# 中的标准单元测试风格真的很笨重。

我遇到了NSpec并且非常喜欢它。似乎让我能够以 Typescript 和 Scala 提供的风格编写测试,而不是我习惯的 C# 风格:

  • [测试] When_CharacterAttacksOtherCharacter_OtherCharacterHealthGoesDownByAttackPower
  • [测试] When_CharacterAttacksOtherCharacter_OtherCharacterDiesWhenHealthBelow
  • [测试] When_CharacterAttacksOtherCharacter_AttackPowerIsMoreWhenTypeAdvantage

它让我用这种风格写作

//context methods are discovered by NSpec (any method that contains underscores)
    void describe_BattleSystem()
    {
        //contexts can be nested n-deep and contain befores and specifications
        context["characters are in battle"] = () =>
        {
            before = () =>
            {
                ModifierRepository modifierRepository = new ModifierRepository();
                battleSystem = new BattleSystem(characterAttackPowerRepo, characterHealthRepo, characterTypeRepo, modifierRepository);
            };


            context["character attacks another character"] = () =>
            {
                before = () => battleSystem.Attack("Hero", "Ogre");
                
                it["defending characters' health goes down by attack character attack power"] = () =>
                {
                    battleSystem.GetHealth("Ogre").Should().Be(90);
                };
                
                it["other character dies when health below 0"] = () =>
                {
                    for (int i = 0; i < 100; ++i)
                        battleSystem.Attack("Hero", "Ogre");
                        
                    battleSystem.IsDead("Ogre").Should().Be(true);
                };
            };
        };
    }

我觉得这是编写测试的更好方法。

但似乎 NSpec 最近一次更新是在 4 年前。而且我根本无法让测试运行程序工作。IDE 支持似乎在那里:

使用 NSpec 的 Resharper 测试运行器

但我不确定 .exes 是否已过时(按照手动步骤不再起作用),或者我是否错过了设置中的某些内容,我无法看到它如何展开到“It”级别。上面的图片来自 ReSharper 我也尝试使用带有 VS 扩展的 Visual Studio 并遇到了同样的问题。

有谁知道 NSpec 是否还活着或者是否有继任者?或类似的东西?我并不是真的在这里寻找完整的 BDD(比如 SpecFlow) 我觉得关键是:

  • 能够以字符串形式编写测试(摆脱那些下划线)
  • 将测试嵌套到合理的单元中

或者,如果有人有办法在标准 xUnit 等中执行上述操作,我错过了:)

作为参考,我已将测试上传到此 git hub 文件夹: https ://github.com/chrispepper1989/RPGAsAService/tree/nspec_test/RPGAAS/RPGAAS/tests

它包含我编写测试的原始方式(在标准 XUnit 中)和我觉得我更喜欢的 NSpec 版本。

4

0 回答 0