我最近一直在与 Moles 合作,现在我正在转向 Fakes。在我的旧测试项目中,我有一个测试设置,如下所示:
[TestInitialize]
public void Setup()
{
//...
}
在那里我做了一些必要的设置,就像设置我的一些痣对象一样。
摩尔中的测试方法看起来像那样(还有 [HostType("Moles")] 指定它使用摩尔对象。
[TestMethod]
[HostType("Moles")]
public void MolesTestMethod()
{
//...
}
现在,在 Fakes 中,他们不再使用 HostType 属性。相反,他们使用 ShimsContext,您可以在其中使用“模拟”类。它看起来像这样:
[TestMethod]
public void FakesTestMethod()
{
using (ShimsContext.Create())
{
//...
}
}
如果您不使用此上下文,您可能会收到一条错误消息。它基本上说 FakesTestMethod 中有一个 ShimInvalidOperationException,您必须按照下面描述的方式使用 ShimsContext.Create()
-- C#:
using Microsoft.QualityTools.Testing.Fakes;
using(ShimsContext.Create())
{
// your test code using Shims here
}
-- VisualBasic.NET
Imports Microsoft.QualityTools.Testing.Fakes
Using ShimsContext.Create
' your test code using Shims here
End Using
所以我试图把我的设置调用放到那个上下文中,结果是这样的:
[TestInitialize]
public void Setup()
{
using(ShimsContext.Create())
{
//...
}
}
现在,如果我在我的 Setup 方法中使用这个上下文,那么在那里完成的所有设置都将在之后用完上下文,并且当单元测试实际上即将运行时将不再有效,这并不是我真正想要的一种测试设置方法。
我通过将 using 放入测试方法本身并在此上下文中和测试代码之前调用私有设置方法来解决此问题。这个 setup 方法现在完成了所有的处理,这在 [TestInitialize] setup 方法之前做了。代码看起来像这样:
[TestMethod]
public void PerformActionFromConfigActionStateActionIdIsSet()
{
using (ShimsContext.Create())
{
Setup();
//...
}
}
我现在对这个问题的问题是,这个解决方案完全“扼杀”了 [TestInitialize] 设置方法的想法。我必须将此代码复制到每个测试方法中,最重要的部分是:在此 Setup() 方法中创建的对象将为每个测试创建和销毁,这根本不理想!
有没有其他方法可以在 Fakes 中设置测试数据?任何帮助表示赞赏!