我传统上部署了一组网页,允许手动验证核心应用程序功能。一个例子是LoggerTest.aspx,它生成并记录测试异常。我总是选择使用类似于以下代码段的方法来引发DivideByZeroException:
try
{
int zero = 0;
int result = 100 / zero;
}
catch (DivideByZeroException ex)
{
LogHelper.Error("TEST EXCEPTION", ex);
}
代码工作正常,但我觉得必须有一个更优雅的解决方案。有没有一种在C#中引发异常的最佳方法?
答案 0 :(得分:70)
try
{
throw new DivideByZeroException();
}
catch (DivideByZeroException ex)
{
LogHelper.Error("TEST EXCEPTION", ex);
}
答案 1 :(得分:27)
简短回答:
throw new Exception("Test Exception");
你需要
using System;
答案 2 :(得分:5)
为测试目的构建自定义异常?然后,您可以通过异常处理/日志记录过程添加您希望异常随身携带的任何自定义属性...
[Serializable]
public class TestException: ApplicationException
{
public TestException(string Message,
Exception innerException): base(Message,innerException) {}
public TestException(string Message) : base(Message) {}
public TestException() {}
#region Serializeable Code
public TestException(SerializationInfo info,
StreamingContext context): base(info, context) { }
#endregion Serializeable Code
}
你班上的
try
{
throw new TestException();
}
catch( TestException eX)
{
LogHelper.Error("TEST EXCEPTION", eX);
}
答案 3 :(得分:3)
抛出异常;
不是吗?
我发现的例子是
if (args.Length == 0)
{
throw new ArgumentException("A start-up parameter is required.");
}
答案 4 :(得分:3)
所以,让我按照你的方式继续做下去。你不想测试抛出DivideByZeroException
时会发生什么;你想测试实际发生除以零时会发生什么。
如果您没有发现差异,请考虑:您确定要何时检查NullRefernceException
以及何时查看ArgumentNullException
?
答案 5 :(得分:2)
感谢您的反馈。我已经将GalacticCowboy的答案标记为正确,因为它显然是基于问题表达方式的正确答案。
对于那些认为“这个问题需要更多”的人来说,你是对的。本质上,我一直在寻找一种提升/导致/模拟异常的最佳方法。正如James Curran所说,这是异常的发生,而不是我所追求的抛出异常。强制DivideByZeroException是我的默认策略,虽然我认为可能有另一种方式或甚至更好的例外强制。
投掷和“提升”异常之间没有什么区别。大多数答案至少似乎都是这种观点。
再次感谢您的反馈意见,如果问题含糊不清,请致谢。
答案 6 :(得分:2)
try
{
string a="asd";
int s = Convert.ToInt32(a);
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
它将返回异常“输入字符串的格式不正确。”
答案 7 :(得分:1)
throw new DivideByZeroException("some message");
?
或者我错过了什么?
答案 8 :(得分:1)
如果您只是测试LogHelper的Error方法,为什么甚至抛出异常?你只需要一个单行:
LogHelper.Error("TEST EXCEPTION", new Exception("This is a test exception"));
答案 9 :(得分:0)
出于测试目的,您可能想要创建一个特定的类(可能是TestFailedException?)并抛出它而不是劫持另一个异常类型。
答案 10 :(得分:0)
System.Diagnostics.Debug.Assert(condition);
给你一个替代方案吗?
也许然后使用
catch (AssertionException) { }
记录测试失败。
另请参阅C# - What does the Assert() method do? Is it still useful?和http://en.csharp-online.net/Assert。
答案 11 :(得分:0)
public class CustomException: Exception
{
public CustomException(string message)
: base(message) { }
}
//
if(something == anything)
{
throw new CustomException(" custom text message");
}
您可以尝试