Csharp/C#教程:维护VS Test Project中unit testing方法之间的上下文分享


维护VS Test Project中unit testing方法之间的上下文

我想按顺序运行以下unit testing:

  1. 使用随机数创建新客户的名称,密码等。
  2. 检索刚刚创建的客户并断言其属性包含相同的随机数
  3. 在同一用户上调用ForgotPassword函数,使用相同的用户名随机数

如清楚所示,我需要生成一次随机数,并在3种测试方法中共享它。
我似乎找不到办法做到这一点。

知道如何实现我的目标吗?

您可以将共享数据放入静态变量吗?

像这样简单:

private static string testValue = "something"; [TestMethod] public void TestMethod1() { Assert.AreEqual(testValue, "something"); testValue = "something2"; } [TestMethod] public void TestMethod2() { Assert.AreEqual(testValue, "something2"); testValue = "something3"; } [TestMethod] public void TestMethod3() { Assert.AreEqual(testValue, "something3"); } 

更新:总结其他关于这个问题的评论,我认为每个人都完全同意在unit testing之间保持状态是一个坏主意。 如果有必要,我的回答只是一种方法。 正如我在另一篇评论中所提到的,过去我不得不这样做,但不是unit testing。 在集成/回归测试之间保持状态有时是有益/必要的,您不一定要模拟对象或隔离应用程序的某些部分。 作为软件测试人员,您并不总是具有影响/能力/权限,可以立即重构或重新架构应用程序,使其成为此测试的最佳选择。

你想要做的是在IRepository接口后面使用类似Repository的东西:

 interface IRepository{ Customer GetCustomer(int id); } 

您可以在代码中实现一个查询数据库的真实类,但在测试中,您可以“模拟”此接口以准确返回您想要的内容。 Moq是我的最爱 – 以下是伪代码,但希望你能得到这个想法:

 [Test] public void Customer_Should_Have_CreateAt_Set_To_Today{ var mock = new Mock(); mock.Setup(x => x.GetCustomer(100)).Returns(new Customer{id = 100, Name = "Steve"}); var Customer = mock.Object; Assert.Equal(Customer.CreatedAt,Date.Today); } 

这里的想法是,您完全控制需要控制的数据,而不依赖于实例化对象的时间等。

运行共享上下文的unit testing是一个非常糟糕的主意。 虽然我愿意接受建议,但我从来没有想过按照你的建议行事。

如果某人以不同的顺序或孤立地运行您的测试,那么它们将失败。 像这样的测试被称为flakey – 它们有时会通过,但不会通过其他测试 – 并且不清楚为什么。

使用像Rhino Mocks这样的模拟框架来实例化你需要的状态中的模拟依赖项要好得多。 这样,每个测试都是一个独立的测试,可以在不参考任何其他测试的情况下validation特定事物。

你会发现维持这样的测试要容易得多,结果中的误报和否定也会减少。

使用依赖项构建unit testing是不好的forms。 然而,构建具有依赖性的function测试并不是一种糟糕的forms。 实际上,在任何具有正常复杂程度的应用程序中几乎都需要它。

你要做的不是unit testing。 这是一个function测试。 并且您确实需要在测试方法之间共享值以从用户的角度来完成事情。

上述就是C#学习教程:维护VS Test Project中unit testing方法之间的上下文分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/983907.html

(0)
上一篇 2021年12月19日
下一篇 2021年12月19日

精彩推荐