Suppose I have a function like this:
public void AddEntry(Entry entry)
{
if (entry.Size < 0)
throw new ArgumentException("Entry size must be greater than zero");
DB.Entries.Add(entry);
}
And a corresponding unit test:
[TestMethod]
[ExpectedException(typeof(ArgumentException), "Entry size must be greater than zero")]
public void AddEntry_TermSizeLessThanZero_ThrowException()
{
Entry e = new Entry(-5);
AddEntry(e);
}
And then I refactor the validation code out:
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");
}
The unit test no longer describes the validation code.
What's the best thing to do in this case? Do I just leave Validate() to be tested through AddEntry?
Edit: to clarify, supposing I had a reason to make the refractored code public (a bit contrived in this situation), would I want to duplicate the test code to be thorough?