2016-09-21 18 views
0

我的解决方案中有很多单元测试。我使用的是NUnit,并且在整个地方都有很多Asserts,例如Assert.AreEqual(5,someVar)。是否存在一个c#框架/插件或模式允许在测试中动态设置期望值?

这种测试预期数字与实际数字的模式重复了很多。

我正在处理的项目涉及到对生成这些数字的模型的大量调整。我目前的过程是,我会根据需求调整模型,这将按预期抛弃所有单元测试。然后开始的是更新我的Assert中的所有期望值以匹配新的实际值的手动过程,以便我的单元测试停止中断,直到需要对模型进行另一个调整。

我的问题是,是否存在一个插件或模式,以便在我要求它们时,断言中的所有预期数字都可以用实际值自动更新?

+1

看看如何使用[TestCaseData](https://github.com/nunit/docs/wiki/TestCaseData)将您的输入和期望输出合并到一个地方。 –

+0

看起来很有趣 - 谢谢Patrick –

回答

0

我不确定你是否正在接近这个正确的方向。

您的单元测试表明您的当前模型按预期工作。

如果你要改变模型,你应该首先改变你的单元测试断言,以便它们符合你希望模型行为的方式。

然后你改变你的模型,并运行单元测试,看看是否一切正常。

要首先更改模型,然后自动更改测试中的断言值,以便它们与更改的模型生成的内容相匹配,则单元测试将无效。他们无法告诉您实施模型更改的方式是否存在问题。

+0

感谢您的回复 - 与您所说的一切都保持一致,这就是我通常的工作方式。对于我正在使用的模型,由于复杂的计算,不可能知道它的运行价值。 至于渲染单元测试无用,情况并非如此,因为我只希望数字根据命令改变。 –

0

这听起来像Mocking

您可以在的NuGet包VS.安装

+0

这不是嘲笑,因为我不能嘲笑输出。我需要计算输出然后改变它。 –

1

尝试设置一个通用的起始值,您可以更改而无需重新计算断言。

例如,假设你正在做的ICalculator与.AddOne()和.TimesTwo()方法

您可以设置一个_startingNumber = 1个
试验AddOne()断言(_startingNumber + 1,结果)
TimesTwo()断言测试(_startingNumber * 2,结果)

当您更改_startingNumber您的断言保持正确。
如果你主张的逻辑,而不是价值,你可以尝试查找表

​​

然后你的断言看起来像断言(_lookup [“SaveStatus”],结果)

所以,如果今天你期待“SaveValue”,但明天你期望“SaveValueNew”你可以在查找中改变它,但所有期望保存状态的断言都是正确的。

相关问题