如何测试try-catch代码块?

3

我正在尝试在catch方法中编写一些代码,并且想要尝试它所生成的异常。但是为了触发catch方法,我需要让程序崩溃,这样才能被捕获并创建异常。

try
{
    //do something
}
catch (Exception ex)
{
    MessageBox.Show("There was an error, please contact the staff");
    using (StreamWriter writer = new StreamWriter(Application.StartupPath + "\\Crashlog\\Crashfile.txt"))
    {
        writer.WriteLine(ex.ToString());
    }
}

现在我想知道,有没有一行简单易记的代码可以确保程序进入catch方法并生成异常?


1
@AlfieGoodacre:不,那样编译不了。 - Jon Skeet
4
throw 怎么样? - ScoobyDrew18
2
只需抛出新异常。 - Stormhashe
如果 StreamWriter 创建/写入 Crashfile.txt 文件失败怎么办?例如,如果例程从 C:\Program Files\MyRoutine (通常的起始路径) 开始,Windows 不允许您在此处创建文件(除非您是管理员)。 - Dmitry Bychenko
1
不要忘记尽可能记录下以下数据:消息堆栈跟踪异常类型 - Dmitry Bychenko
思考依赖注入——如果您想要发送带有异常数据的电子邮件,该怎么办? - Dmitry Bychenko
3个回答

10
try
{
    throw new Exception();
}

6

throw new Exception("Test"); 是一种可靠的方法。

你甚至可以使用比"Test"更有用的内容。


如果我使用“Test”字符串,它会做什么? - Steven
1
您可以在catch处检查异常的内容。 - Bathsheba

3

在这种情况下,我喜欢使用的一种方法是:

int div = 0;

int res = 3/div;

这将抛出一个DivideByZeroException异常。

通常情况下,这是不应该被应用的,特别是如果你在PLC级别上进行编程。但在C#世界中,这只是一个简单的蚊子叮咬。


我非常讨厌这个。作为一个C和C++世界的程序员,这是未定义行为。有更好的替代方案。 - Bathsheba
@Bathsheba 确实如此 ;) - Mong Zhu
1
但是从 C# 的角度来看,我不认为这是不正确的。赞一个! - Bathsheba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,