【发布时间】:2011-01-13 10:13:54
【问题描述】:
我一直在使用 MSpec 来编写我的单元测试,并且非常喜欢 BDD 风格,我认为它更具可读性。我现在正在使用 MSpec 不支持的 Silverlight,所以我不得不使用 MSTest,但仍想保持 BDD 风格,所以我正在尝试找出一种方法来做到这一点。
只是为了解释我想要实现的目标,这是我编写 MSpec 测试的方式
[Subject(typeof(Calculator))]
public class when_I_add_two_numbers : with_calculator
{
Establish context = () => this.Calculator = new Calculator();
Because I_add_2_and_4 = () => this.Calculator.Add(2).Add(4);
It should_display_6 = () => this.Calculator.Result.ShouldEqual(6);
}
public class with_calculator
{
protected static Calculator;
}
所以使用 MSTest,我会尝试像这样编写测试(虽然你可以看到它不起作用,因为我已经放入了 2 个 TestInitialize 属性,但你得到了我想要做的......)
[TestClass]
public class when_I_add_two_numbers : with_calculator
{
[TestInitialize]
public void GivenIHaveACalculator()
{
this.Calculator = new Calculator();
}
[TestInitialize]
public void WhenIAdd2And4()
{
this.Calculator.Add(2).Add(4);
}
[TestMethod]
public void ThenItShouldDisplay6()
{
this.Calculator.Result.ShouldEqual(6);
}
}
public class with_calculator
{
protected Calculator Calculator {get;set;}
}
谁能提出一些更优雅的建议来使用 MSTest 以这种方式编写测试?
【问题讨论】:
-
也许我错过了,但是当您明确想要 MSpec(一个 Spec 系列工具)时,为什么还要使用 MSTest(一个 xUnit 工具)呢?您可以让 MSTest 的行为有点像 MSpec,但它会是一个杂项。例如你将如何从 MSpec 风格的 xUnit 测试中生成可读的规范?
-
我是 MSpec(和 Machine.Fakes)的忠实粉丝,但是当我问这个问题时,我在一个项目中被告知要使用 MSTest(我自己永远不会选择那个!) .考虑到工具限制,下面答案中概述的这种方法效果很好。你会很高兴听到我从那以后继续前进并再次愉快地进行 MSpecing!
-
非常高兴!对你有益。我对这种解决方案的不满是,两个阵营的维护者都很难理解这种妥协。
-
几年后,我强烈建议尝试NSpec(免责声明:我最近为它做出了贡献)
标签: c# unit-testing mstest bdd mspec