gpt4 book ai didi

c# - 协助使用犀牛模拟测试抽象方法

转载 作者:行者123 更新时间:2023-11-28 21:06:05 25 4
gpt4 key购买 nike

我想为我的 C# 类编写一些单元测试。我有一个名为 BaseClass 的基类,它有一个名为 Execute 的抽象方法,还有一个名为 Redirect 的方法。我有一个名为 Class1 的类,它继承了 BaseClass 并实现了抽象的 Execute 方法,这是我要测试的方法。以下代码进一步解释了设置:

public abstract class BaseClass
{
public abstract void Execute();

public void Redirect()
{
// redirect code here
}
}

public class Class1 : BaseClass
{
public void Execute()
{
// do some processing

this.Redirect();
}
}

我正在使用 mstest 并使用 rhino mocks 进行模拟。我想为 Execute 方法编写测试,以测试它是否按预期工作。

正如您从上面看到的,Execute 方法调用了基本方法 Redirect,所以我期望 Redirect > 方法被调用。

我使用 Rhino 模拟模拟存储库创建 Class1 的部分模拟。创建的 mock 包含很棒的 Execute 方法,但不包含对 Class1 中的 Redirect 方法的引用。我希望能够对调用 Redirect 方法的模拟存储库设置期望。

关于如何使用 rhino mocks 创建测试以实现我所概述的内容,有什么提示或建议吗?

最佳答案

如果您需要模拟该方法,很可能该行为已经足够复杂以至于您无法直接对其进行测试。

因此,请考虑将该行为委托(delegate)给协作类,然后完全模拟该类。

例如,如果执行方法将实体保存到数据库,我会创建一个存储库,通过构造函数依赖注入(inject)该存储库,然后请求存储库保存我的实体。然后可以使用标准技术模拟整个协作类。

目前看来您的类(class)负责太多,这就是您遇到问题的原因。 Mocks 在用于表达协作时非常有效,这使我们能够创建具有单一职责的类,这使我们能够创 build 计良好、可维护的代码。我推荐Steve Freeman and Nat Pryce's book on the subject .

关于c# - 协助使用犀牛模拟测试抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8460511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com