私は最近Molesと仕事をしていて、今はFakesに切り替えています。以前のテストプロジェクトでは、次のようなテストセットアップがありました。
[TestInitialize]
public void Setup()
{
//...
}
そこでは、ほくろオブジェクトのいくつかをセットアップするのと同じように、いくつかの必要なセットアップを行いました。
ほくろのテストメソッドは、どういうわけかそのように見えました([HostType( "Moles")]も、ほくろオブジェクトを使用することを指定しています。
[TestMethod]
[HostType("Moles")]
public void MolesTestMethod()
{
//...
}
現在、偽物では、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())
{
//...
}
}
さて、セットアップメソッドでこのコンテキストを使用すると、そこで行われるすべてのセットアップは後でコンテキストを使い果たし、単体テストが実際に実行されようとしているときに無効になります。これは実際には私が望んでいることではありません。テストのセットアップ方法。
この問題を修正するには、usingをテストメソッド自体の内部に配置し、このコンテキスト内でテストコードの前にプライベートセットアップメソッドを呼び出すだけです。このセットアップメソッドは、[TestInitialize]セットアップメソッドの前に実行されていたすべての処理を実行するようになりました。コードはどういうわけか次のようになります。
[TestMethod]
public void PerformActionFromConfigActionStateActionIdIsSet()
{
using (ShimsContext.Create())
{
Setup();
//...
}
}
この問題に関する私の問題は、このソリューションが[TestInitialize]セットアップメソッドのアイデアを完全に「殺す」ことです。このコードを各テストメソッドと最も重要な部分に複製する必要があります。このSetup()メソッドで作成されたオブジェクトは、各テストで作成および破棄されますが、これはまったく理想的ではありません。
偽物でテストデータを設定する他の方法はありますか?どんな助けでも大歓迎です!