Rei*_*aka 4 c# testing unit-testing
假设我有这样的函数:
public void AddEntry(Entry entry)
{
if (entry.Size < 0)
throw new ArgumentException("Entry size must be greater than zero");
DB.Entries.Add(entry);
}
Run Code Online (Sandbox Code Playgroud)
并进行相应的单元测试:
[TestMethod]
[ExpectedException(typeof(ArgumentException), "Entry size must be greater than zero")]
public void AddEntry_TermSizeLessThanZero_ThrowException()
{
Entry e = new Entry(-5);
AddEntry(e);
}
Run Code Online (Sandbox Code Playgroud)
然后我重构验证码:
public void AddEntry(Entry entry)
{
Validate(entry);
DB.Entries.Add(entry);
}
public void Validate(Entry entry)
{
if (entry.Size < 0)
throw new ArgumentException("Entry size must be greater than zero");
}
Run Code Online (Sandbox Code Playgroud)
单元测试不再描述验证代码.
在这种情况下,最好的做法是什么?我是否只是通过AddEntry离开Validate()进行测试?
编辑:澄清一下,假设我有理由将折射代码公开(在这种情况下有点做作),我想复制测试代码是否彻底?
由于您使Validate()方法成为对象的公共成员(无论出于何种原因),您当然应该为它添加单独的测试.测试AddEntry应保持不变.
单元测试应仅测试单元的接口,不应假设任何实现细节.因此,在这种情况下,您应该按原样保留测试AddEntry,因为它描述了接口的行为.但你不应该假设或测试那些AddEntry()电话Validate().