c# - 如何使用 moq 和 mspec(BDD 风格)比较两个对象列表

标签 c# unit-testing moq bdd

我刚刚开始为我当前的项目探索 BDD。我将最小起订量与 mspec 一起使用以获得良好的测试输出。 但是,我找不到足够的示例来说明我正在尝试做的事情,也许我使用了错误的方法或者可能只是对语法的理解不够,请指教。

问题是我正在尝试验证是否已在类中设置属性。此属性是一个对象列表,我想验证每个对象是否具有与预期对象相同的值。

所以给定初始前提

public class Data
{
    int a;      
}

public class DataViewer : IDataViewer
{
    public List<Data> dataList {get;set;}
}

public interface IDataViewer
{
    public List<Data> dataList {get;set;}
}

我正在使用 mspec 和 moq 来执行以下操作

class when_refreshing_data_list : Context
{
    Because .... = () =>
    {
        ....  // process the datalist
    }

    ThenIt should_set_the_data_list = () =>
    {
        List<DataList> expectedDataList = new List<DataList>();
        expectedDataList.add() // add some expected values to the datalist
        ...

        // problem is here in comparing two List<DataList>
        _mockDataViewer.VerifySet(f => f.dataList = expectedDataList)
    }
}

public abstract class Context
{
    Establish context = () =>
    {
         _mockDataViewer = new Mock<IDataViewer>();
    }
}

我将如何进行比较? 我可以使用运算符覆盖吗?如果是,如何? 我试图将表达式主体放在 lambda 的右侧,结果却被告知“带有语句主体的 lambda 表达式无法转换为表达式树”。

感谢任何帮助:)

最佳答案

是否重载了 Data 对象上的 equals 方法?

public override bool Equals(object obj)
{
    if (((Data)obj).a.Equals(this.a))
        return true;

    return false;
}

当您将 dataList 与其 expectedDataList 进行比较时,这应该会自动调用。

关于c# - 如何使用 moq 和 mspec(BDD 风格)比较两个对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2113739/

相关文章:

c# - 以编程方式获取sql server的默认备份路径

java - 单元测试中的 JMS 依赖关系

unit-testing - 如何模拟 HttpClientCertificate?

c# - Moq - 尝试测试 ActionResult 时出现空引用异常

c# - Moq,Setup() 和 Returns() 之间的类型不匹配

c# - WinForm - TabStop 不工作

c# - 套接字连接在我读取数据之前重置

c# - SQL插入一行或多行数据?

swift - Xcode 无法将测试目标添加到现有的 swift 项目 - 要测试的目标显示为灰色

c# - Moq - 如何验证属性值是否通过 setter 设置