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程序集。可能是处理此场景的最佳方法?您只需在此处测试模拟。我看不出这有什么价值