假设我具有来自第三方库的以下类:
public class ThirdPartyType { ... }
public class ThirdPartyFunction
{
public ThirdPartyType DoSomething() { ... }
}
实现细节并不重要,它们实际上是我无法控制的该第三方库。
假设我为ThirdPartyFunction
编写了一个适配器类:
public class Adapter
{
private readonly ThirdPartyFunction f;
public Adapter()
{
f = new ThirdPartyFunction();
}
public string DoSomething()
{
var result = f.DoSomething();
// Convert to a type that my clients can understand
return Convert(result);
}
private string Convert(ThirdPartyType value)
{
// Complex conversion from ThirdPartyType to string
// (how do I test this private method?)
...
}
}
如何测试Convert(ThirdPartyType)
的实现是否正确? Adapter
类只需要它,这就是为什么它是私有方法的原因。
答案 0 :(得分:3)
我建议将代码提取到单独的类中,然后测试该类。尽管此Adapter
仅使用它,但适配器也不应该负责进行转换(符合“单一职责原则”)。
通过将其提取出来,可以独立于第三方代码测试转换器。
如果转换器不需要任何状态,则还可以将其设为静态类,然后直接在适配器中引用它,而无需通过依赖注入进行注册。
如果您考虑一下,则适配器不需要测试(因为它只是包装器),而转换器则需要-因此将其提取到另一个类是有意义的以允许对其进行测试,即使它确实意味着另一个代码中的类。
此外,将转换器提取到单独的类意味着如果ThirdPartyType
或string
的格式发生更改,则可以进行更改而不会影响Adapter
的实现。 / p>