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

时间:2014-07-29 06:59:13

标签: unit-testing c#-4.0 testing

我有一个方法,当参数接收一个列表,该列表包含树的节点和锯齿状的数组,我希望由其他人重新组建这些节点。该方法返回具有新层次结构的列表。但是,原始节点不会丢失,而是保存为新树。我的方法是:

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

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

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

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

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


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

}

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

感谢。

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

1 个答案:

答案 0 :(得分:1)

如果您想使用我推荐的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循环来遍历集合。