【发布时间】:2013-03-05 16:57:15
【问题描述】:
在编写单元测试时,我最苦恼的一件事是我要测试什么,不测试什么。
那么给定下面的代码,我应该写什么测试:
public static class Enforce
{
public static T ArgumentNotNull<T>(T parameter, string parameterName) where T : class
{
if (parameterName.IsNullOrWhiteSpace())
throw new ArgumentNullException("parameterName");
if (parameter.IsNull())
throw new ArgumentNullException(parameterName);
return parameter;
}
public static string ArgumentNotNullOrEmpty(string parameter, string parameterName)
{
ArgumentNotNull(parameter, parameterName);
if (parameter.IsNullOrEmpty())
throw new ArgumentException(parameterName);
return parameter;
}
public static string ArgumentNotNullOrWhiteSpace(string parameter, string parameterName)
{
ArgumentNotNull(parameter, parameterName);
if (parameter.IsNullOrWhiteSpace())
throw new ArgumentException(parameterName);
return parameter;
}
public static T NotNull<T>(T instance) where T : class
{
instance.IfNullThrow<T, NullReferenceException>(String.Format(EnforceResources.TypeNotNull, typeof(T).FullName));
return instance;
}
}
}
我是否应该为ArgumentNotNull<T> 编写一个测试来测试是否引发了异常,然后再编写一个测试来测试未引发的异常?我想我的问题是,我是否应该编写测试来测试预期的结果,然后完全相反?
[Fact]
public void ShouldThrowArgumentNullException()
{
object arg = null;
Assert.Throws<ArgumentNullException>(() => { Enforce.ArgumentNotNull(arg, "arg"); });
}
[Fact]
public void ShouldNotThrowArgumentNullException()
{
var arg = "Test";
Assert.DoesNotThrow(() => { Enforce.ArgumentNotNull(arg, "arg"); });
}
【问题讨论】:
标签: .net unit-testing