unit-testing - 如何测试方法返回正确的值并在另一个变量中设置正确的值?

标签 unit-testing c#-4.0 testing

我有一个方法,作为参数接收一个列表,该列表包含树的节点和一个锯齿状数组,其中我想用其他节点替换这些节点。该方法返回具有新层次结构的列表。但是,原来的节点并没有丢失,而是另存为一棵新树。我的方法是:

public List<Nodes> exchangeNodes(List<Nodes> paramOriginalTree, Nodes[][] param newNodes)
{
    //code
}

好吧,通过单元测试,我可以使用调用此 exchangeNodes 的方法并测试结果是否为预期结果。类似这样的事情:

public 无效 exchangeNodesTest() { //1.- 创建节点并用树填充列表。 //2.- 使用交换创建一个锯齿状数组 //3.- 调用方法并将结果保存在新列表中 //4.- 我使用断言来测试结果是否正确

List<Nodes> lstNewTree = exchangeNodes(lstActualTree, exchangedNodes);

assert(lstNewTree.Count = 4);
....


//How I test if the old nodes has the correct hierarchy?

但是我如何测试原始替换节点是否具有正确的层次结构?因为该方法只返回新的层次结构。我想避免需要返回一个锯齿状的阵列,例如仅用于测试目的的所有替换节点的层次结构列表。

谢谢。

编辑:我需要测试原来的替换节点,因为它会保存在数据库中。我正在使用 EF6 和 SQL Server。

最佳答案

如果你想使用Fluent Assertions ,我推荐。您可以创建一个适用于该作业的扩展方法:

public static class FluentAssertionsExtensions
{
    public static void ShouldBeEquivalentWithOrder<T>(this IEnumerable<T> enumerable1, IEnumerable<T> enumerable2)
    {
        enumerable1 = enumerable1.ToList(); // to materailize the collection
        enumerable2 = enumerable2.ToList(); // to materailize the collection
        enumerable1.Should().ContainInOrder(enumerable2); 
        enumerable2.Should().ContainInOrder(enumerable1); // to meke sute enumerable2 is not just a subset of enumerbale1
    }
}

否则,您可以创建一个使用 for 循环遍历集合的简单助手。

关于unit-testing - 如何测试方法返回正确的值并在另一个变量中设置正确的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25009764/

相关文章:

unit-testing - 您是否在测试用例中使用了实现中的常量?

c# - 如何使用 TDD 方法创建 Restful Web 服务?

python - 使用 Python unittest 模拟 side_effect

asp.net - IE 10 不显示文本框宽度和高度

asp.net - asp.net c# 中的日期时间错误

java - 将测试名称作为参数传递

java - EasyMock断言异常被线程吞没

c++ - 80040111 ClassFactory 无法提供请求的类(HRESULT 异常 : 0x80040111 (CLASS_E_CLASSNOTAVAILABLE))

unit-testing - IO返回值测试

ruby-on-rails - Rspec Controller 测试,传递 JSON 参数