1

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例外をスローせずに、型のプロパティを持つインターフェイスをモックする方法はありますか?

4

1 に答える 1

0

winrt では動的な codegen が許可されていないため、私が知っているように、Windows ストア ランタイムで Moq を使用することはできません。

Win Store Projectから、テストしたいすべてのコードを参照する単純な.NET Frameworkライブラリを作成することを考えただけです

Moq と nUnit を使用して Windows ランタイム ライブラリの単体テストを作成する方法

于 2013-04-14T17:27:30.400 に答える