C# 仅使用Moq测试仅集合属性的值

C# 仅使用Moq测试仅集合属性的值,c#,.net,moq,C#,.net,Moq,我有一个简单的类,它在构造函数中设置了一个字段,并且匹配的属性是只读的 public class COMAssembly : ICOMAssembly { private List<string> properties = new List<string>(); public List<string> Properties { get { return properties; } } ... } 公共

我有一个简单的类,它在构造函数中设置了一个字段,并且匹配的属性是只读的

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

    ...
}
公共类COMAssembly:ICOMAssembly
{
私有列表属性=新列表();
公共列表属性
{
获取{返回属性;}
}
...
}
我有使用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.
        };
}
使用机器规范;
使用最小起订量;
使用System.Collections.Generic;
使用它=Machine.specification.It;
带有组件的公共类MSPEC_
{
受保护的静态模拟组件;
受保护的静态列表_listofstring;
建立上下文=()=>
{
_mockCOMAssembly=新模拟(MockBehavior.Loose);
_mockCOMAssembly.DefaultValue=DefaultValue.Mock;
_mockCOMAssembly.SetupAllProperties();
_mockCOMAssembly.SetupProperty(m=>m.Properties,new List(){“Prop1”,“Prop2”});
};
}
[主题(类型(带有COM组件的MSPEC组件),“带有COM组件”)]
当\u请求\u属性的\u列表\u和\u程序集\u具有\u属性时的公共类:MSPEC\u和\u COM\u程序集
{
因为=()=>
{
_ListOfstring=\u mockCOMAssembly.Object.Properties;
};
它应该返回一个带有值=()=>
{
//TODO:验证_listofstring/_mockcomsassembly.Object.Properties的Count属性是否大于零。
};
}

我查阅了很多论坛、Moq教程等,但找不到如何仅使用Moq来实现这一点的答案。我不想使用NUnit。我还通过了其他测试来验证_listofstring不为null,并且get属性工作正常。我对MSpec/Moq/单元测试还不熟悉,尽管到目前为止我已经读了很多关于这个主题的书。感谢您的帮助

我不明白你想在这里实现什么?通常,您会创建
Mock
以作为类的依赖项提供给需要
ICOMAssembly
的类,而无需使用
comsembly
类。你似乎在试图从我收集到的信息来验证模拟的行为?!Moq本身不是一个测试库;这本书是对一本书的补充。正如上面的评论者所指出的,您通常不会测试mock本身——您确定您了解mock库的用途吗?(Mocking是一个有点高级的测试概念,在你掌握了无依赖性的简单类的常规单元测试之前,你不应该开始研究它。)实际上你还没有说问题出在哪里。除此之外,特雷弗的评论是正确的;您似乎正在对模拟进行单元测试,这是一个毫无意义的练习。因此我必须使用NUnit。我同意。我在模拟COM程序集,因为我可以使用几个COM程序集中的任何一个。我创建了一个用于测试的存根COM程序集。可能是处理此场景的最佳方法?您只需在此处测试模拟。我看不出这有什么价值