編寫單元測試時我最擔心的事情之一是測試什麼,測試什麼。給我下面的代碼應該寫什麼測試?
因此,考慮下面的代碼,哪些測試我應該寫:
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"); });
}
有關命名這些測試如何?你對可能的樣子有什麼想法嗎? – Sam 2013-03-17 07:38:33
對於命名,這可能有所幫助:http://stackoverflow.com/a/1594049/1373170 – 2013-03-17 07:40:11