Windows ストア アプリケーションから始めたばかりで、自分のプロジェクトでテスト駆動開発を使用することにしました。以前に NUnit を使用した経験があり、それが私の選択したライブラリであり、Windows ストア アプリケーションに使用するモッキング ライブラリとして Web サイトで推奨されているモッキング ライブラリである MoqRT を使い始めました。
私が直面している問題はDateTimeOffset
、プロパティの型として a を持つオブジェクトをモックしているときです。次の例外が発生します。
System.InvalidProgramException: 共通言語ランタイム
が Castle.Proxies.ITimeProxy_1.get_Expires() で無効なプログラムを検出しました...明確にするために残りのスタックトレースを削除しました
現在、これはプロパティで型を使用する場合にのみ発生DateTimeOffset
し、たとえば文字列プロパティのモックは完全に正常に機能します。
using System;
using Moq;
using NUnit.Framework;
namespace StoreTesting
{
[TestFixture]
public class UnitTest1
{
[Test]
public void TestMethod1()
{
// Mock
DateTimeOffset expirydate = DateTimeOffset.UtcNow.AddSeconds(2000);
var time = new Mock<ITime>();
time.Setup(m => m.Expires).Returns(expirydate);
// Act
TimeDependant obj = new TimeDependant(time.Object);
var result = obj.Act();
// Assert
Assert.That(result, Is.EqualTo(expirydate));
}
}
public class TimeDependant
{
private readonly ITime time;
public TimeDependant(ITime time)
{
this.time = time;
}
public DateTimeOffset Act()
{
return time.Expires;
}
}
public interface ITime
{
DateTimeOffset Expires { get; }
}
}
モックの代わりにそれをサブクラスITime
化して使用すると、すべてがうまくいきます。
これを検索すると、例外の主な問題は「大きすぎるメソッド」に関連しているように見えますが、これはタイプのプロパティに対してのみ発生するためDateTimeOffset
、他のプロパティは失敗するはずなので、テストにどのように影響するかわかりませんそれに関して何かだったら。
もう 1 つのことは、NUnit アプリケーションを使用してテストを実行していることです。これは、Visual Studio 2012 が Windows ストア アプリケーションであるため、テストが実行されないためです (これはまったく別の質問です)。これが動作にも影響するかどうかはわかりません。
私が求めている質問は次のとおりです。DateTimeOffset
例外をスローせずに、型のプロパティを持つインターフェイスをモックする方法はありますか?