我有以下代码(我已经简化了这个问题):
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/