c# - 如何为调用同一类中其他方法的方法创建基于状态的测试?

标签 c# unit-testing xunit

我有以下代码(我已经简化了这个问题):

    public void HandleModeInit(int appMode){
        switch(appMode){
            Case 1:
                DoThis();
            Case 2:
                DoThat();
            Case 3:
                //no mode 3
            Case 4:
                DoSomethingElse();
            Case else:
                //do nothing
        }
    }

如何在不将其转换为集成测试的情况下对该方法进行单元测试(最终测试 DoThis()、DoThat() 和 DoSomethingElse() 正在做什么)?由于这些方法调用是对 与 HandleModeInit() 相同的类中的方法进行的,您将如何测试它?

虽然理想情况下,方法调用将被提取到另一个类中,但如果此移动没有任何意义怎么办?

最佳答案

如果您可以控制传递给此方法的内容,那么我将传递一个将 appmode 作为参数的接口(interface),该接口(interface)是一个 AppModeImplementationFactory。该工厂的目的是创建 AppModeImplementations。工厂看起来如下:

public class AppModeImplementationFactory: IAppModeFactory
{
   public IAppModeImplementation Create(int appMode)
   {
      // switch case goes here to create the appropriate instance
   }
}

当您传入工厂时,这可以是一个模拟实例,您可以验证是否调用了创建方法。如果您想验证返回的实例类型,您需要在不同的测试下进行。由于应用模式,这种方法将满足您执行逻辑的需要,因为工厂将根据应用模式返回您需要的实现。

希望对你有帮助

关于c# - 如何为调用同一类中其他方法的方法创建基于状态的测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1519882/

相关文章:

angularjs - AngularJS 中的单元测试 promise 错误 : Expected a spy, 但得到了 getCtrl({ })

c# - 在单元测试类中使用依赖注入(inject)

c# - xUnit 测试异步事件处理程序

c# - LoginView 控件仅显示特定用户的登录 View

c# - 从 JSON 响应中删除元素

c# - 在 Entity Framework 中使用 SqlQuery RAW 查询返回匿名类型

unit-testing - 有没有一种方法可以测试 rust 中的宏?

java - EasyMock - 期望静态方法调用

c# - 有没有办法在 xunit 测试类中的每个测试之前异步运行设置方法?

c# - 在 Visual Studio 的子类中继承和运行单元测试