4

私は単体テストで Moles を使い始めており、ドキュメンテーションに少し苦労しています。

DateTime.Now をほくろしたい。

mscorlib への参照を追加するという古い方法を見回した場合は、そのための stubx ファイルを追加します ([新しい項目を追加] -> [テスト用のスタブとモール])。

'Stubs and Moles for Testing' テンプレートは廃止されました。代わりに、参照を右クリックして [Add moles assembly] を選択するだけで問題ありません。

VS2010 では、mscorlib への参照を直接追加することはできません。"System" への参照があるためです。オブジェクト ブラウザーで DateTime をこの名前空間の一部として表示できるので、これは問題ありません。

システム参照用のモール アセンブリを追加して再構築しても、MDateTime を解決できません。

助言がありますか ?

4

1 に答える 1

15

Moles of mscorlibの場合、テストプロジェクトの参照を直接右クリックする必要があります。mscorlib用のAddMolesAssemblyがあります。次に、Moles of System.DateTimeが必要なため、テストクラスに追加using System.Moles;します(実際には、もう少し必要です)。

[TestMethod()]
[HostType("Moles")]
public void DateTimeMolesTest()
{
    DateTime date = new System.DateTime(2000, 1, 1, 2, 3, 4, 5);
    MDateTime.NowGet = () => date;
    Assert.AreEqual(date, DateTime.Now);
}

このテストを実行すると、以下を追加する必要があるため失敗します。

using Microsoft.Moles.Framework;
[assembly: MoledType(typeof(System.DateTime))]

その後、テストは成功します。Molesは一部の特殊なタイプのmscorlibでは使用できないことを忘れないでください。

于 2011-05-11T09:48:24.790 に答える