1

コンストラクターでフィールドを設定する単純なクラスがあり、一致するプロパティは読み取り専用です。

public class COMAssembly : ICOMAssembly
{
    private List<string> properties = new List<string>();
    public List<string> Properties
    {
        get { return properties; }
    }

    ...
}

MSpec と Moq を使用したこれらのテスト クラスがあります。

using Machine.Specifications;
using Moq;
using System.Collections.Generic;
using It = Machine.Specifications.It;

public class MSPEC_With_a_COM_Assembly
{
    protected static Mock<ICOMAssembly> _mockCOMAssembly;
    protected static List<string> _listOfStrings;

    Establish context = () =>
       {
           _mockCOMAssembly = new Mock<ICOMAssembly>(MockBehavior.Loose);
           _mockCOMAssembly.DefaultValue = DefaultValue.Mock;
           _mockCOMAssembly.SetupAllProperties();
           _mockCOMAssembly.SetupProperty(m => m.Properties, new List<string>() { "Prop1", "Prop2" });
       };
}

[Subject(typeof(MSPEC_With_a_COM_Assembly), "With a COM Assembly")]
public class When_asking_for_a_list_of_properties_and_assembly_has_properties : MSPEC_With_a_COM_Assembly
{
    Because of = () =>
      {
          _listOfStrings = _mockCOMAssembly.Object.Properties;
      };

    It Should_return_a_list_with_values = () =>
        {
            //TODO:  Verify that the Count property of _listOfStrings/_mockCOMAssembly.Object.Properties is greater than zero.
        };
}

多くのフォーラム、Moq チュートリアルなどを確認しましたが、Moq のみを使用してこれを行う方法に対する答えが見つかりません。NUnit を使用したくありません。_listOfStrings が null ではなく、プロパティの取得が正常に機能することを確認する合格する他のテストがあります。私は MSpec/Moq/Unit Testing を実践するのは初めてですが、これまでのトピックについてはたくさん読んできました。どんな助けでも大歓迎です!

4

0 に答える 0