unit-testing - 单元测试递归函数

标签 unit-testing recursion moq

使用 Moq 和 native VS 测试框架。我正在尝试测试传入值的递归函数:

public bool AuthenticateByDomain(string domainName, string password, string username, string email)
    {

用于查找实体:
// look for an existent domain name.
var matchFound = this.FindDomainPasswordMatch(domainName, password);

如果找到,则查找存在的用户名(该帐户已存在):
        if (matchFound)
        {
            var account = this.GetByEmail(null, email);
            if (account != null)
            {

如果未找到,请根据提供的电子邮件和用户名创建帐户:
var uAccount = this.CreateAccount(username, password, email, domainName);

然后递归地调用自己,(大概)调用 GetByEmail()满足并调用验证分支。

我发现了几个 Moq 与存储库交互的示例,但无法确切了解如何解决我的特定问题 - 测试存储库是否更新并且递归成功。我_能够统一获取顶级中找到的每个方法 - 我是否声明足够好并继续前进?这是持久性测试吗?

最佳答案

在轻松测试某些东西时遇到麻烦可能是糟糕的设计决策的一个指标。如果您真的需要这种递归,请让自己清楚。
将这两个调用拆分为 CreateAccount 不是更容易吗?和 FindDomainPasswordMatch并在设计上将它们分开。也许我没有完全理解你的观点,但递归本身似乎没有真正的“递归”用途。它只是一个带有重复代码的“懒惰”调用。我建议你将这些机制与他们自己分开。这也使测试变得更加容易,并且您应该不会在测试这些方法时遇到任何问题。
希望这可以帮助。

关于unit-testing - 单元测试递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15156631/

相关文章:

c++ - 如何使用迭代器在 C++ 中的递归函数中传递值?

javascript - 从树结构中抓取所有 "names"

c# - 如何使用 Moq 模拟 SqlDataReader - 更新

java - 具有删除目录方法的单元测试文件实用程序类

php - 如何使用 PHPUnit 测试确切的异常消息,而不是子字符串?

javascript - 睡衣和 JavaScript : Too much recursion

c# - 如何模拟在另一个方法中调用的方法?

c# - 如何模拟没有接口(interface)的方法?

c# - 如何单元测试数据库依赖行为 C#

objective-c - 如何使用未作为参数传递给方法的 OCMock 模拟对象?