我正在努力正确地编写单元测试,我想知道通过调用另一种方法验证结果来测试被测方法的结果是不是很糟糕?
即。在下面的示例中,我只能通过调用FetchObject或HasCachedObjects属性来检查StoreObject方法调用是否成功(即,存储在缓存中的对象),这两个属性都包含应单独测试的逻辑。在这种情况下,如果结果在公共API中隐藏,您会做什么?
我有一个Cache类:
public class Cache {
private Dictionary<string, object> _Cache = null;
public bool HasCachedObjects {
get {
if (_Cache.Count > 0) {
return true;
} else {
return false;
}
}
}
public Cache() {
_Cache = new Dictionary<string,object>();
}
public void StoreObject(string key, object obj) {
_Cache[key] = obj;
}
public object FetchObject(string key) {
if (_Cache.ContainsKey(key)) {
return _Cache[key];
}
return null;
}
}
答案 0 :(得分:3)
不要将测试用例视为测试方法;将其视为测试功能单元(或者可能是用例)。
所以你的测试可能是StoreObject_WhenSuccessful_AddsToCache或其他一些。
是的,我会通过公共API确认测试。
答案 1 :(得分:2)
完全没有。实际上,这些可能是两个不同的测试 - 一个用于在缓存对象后验证HasCachedObjects是否为真,另一个用于验证在存储对象后是否可以检索对象。
(我不确定这个类的功能除了在一个稍微不同的API中包装一个Dictionary,但这是另一个主题......)
答案 2 :(得分:0)
您可以测试不同的用例/场景,而不是测试单个方法,例如:添加到缓存 - 检查对象是否存在等等...