如何对ASP.NET Web Forms进行单元测试

3
我有一个ASP.NET应用程序,你可以在其中使用文件上传控件上传XML文件。它将被解析为对象列表并以网格视图的形式显示,非常简单。但现在我被要求编写一些单元测试。我对TDD不熟悉,希望得到一些如何编写单元测试的建议。
这是我目前拥有的代码。其中我硬编码了XML文件。有没有一种方法来针对文件上传进行单元测试?
[TestClass]
public class UnitTest1
{

     string source = @"C:\Users\\Desktop\Web Application\ Web Application.Tests\LunchTest.xml";


    [TestMethod]
    public void ParseXmlTest()
    {
        XmlUlitilyClass x = new XmlUlitilyClass();

        Assert.AreEqual(x.ParseXml(source).Count, 4);
        Assert.AreEqual(x.ParseXml(source)[3].Name,"Roast of the day");
        Assert.AreEqual(x.ParseXml(source)[3].DesertIncluded, true);
        Assert.AreEqual(x.ParseXml(source)[0].Calories, 350);
        Assert.AreEqual(x.ParseXml(source)[1].Vegetarian, false);      
    }
}

1
x.ParseXml(source) 提取到本地变量中,解析 5 次会太过繁琐 :) - Backs
提醒一下,你的问题是关于单元测试,而不是TDD。TDD是先编写测试 - 在你的情况下,你已经编写了你的应用程序。 - Mike Stockdale
1个回答

2
有没有一种方法可以对文件上传进行单元测试?
在ASP.NET中,你肯定不能像在你的情况下的FileUpload控件那样单元测试事件处理程序和其他外部内容。此外,你不需要为fileupload控件编写单元测试,而只需要检查主要逻辑的正面/负面情况。是的,你完全可以硬编码xml文件名。根据你的帖子,我看到的主要业务逻辑是:
1. 单元测试文件处理逻辑。即测试输入错误文件(或不存在的文件)的情况。你可以创建单独的单元测试方法来提供单独的硬编码文件输入的+/-ve情况。
2. XML解析逻辑。
你可以考虑重构你的代码,将这两个逻辑放在单独的方法中,并对这些方法进行单元测试。根据你的评论,如果你提供了错误的文件名,那么运行时肯定会抛出一个名为FileNotFoundException的异常,你可以使用ExpectedException属性在你的测试方法中捕获它。例如:
string source = @"C:\Users\\Desktop\Web Application\ Web Application.Tests\LunchTest.xml";

[TestMethod]
[ExpectedException(typeof(FileNotFoundException),
    "Provided File doesn't exists.")]
public void TestFileNotExists()
{
   //your code goes here
}

在MSDN中了解有关单元测试的更多信息,请参阅使用Visual Studio Team Test进行单元测试演练


好的,谢谢。有没有关于如何单元测试输入错误文件或不存在文件的建议。我是新手,对单元测试不太熟悉。 - TomGill
谢谢您现在的查看。 - TomGill
@TomGill,欢迎,如果答案有帮助,请点击勾选按钮考虑接受它。因为您是新用户,所以我特别指出。 - Rahul
我该如何测试文件未找到的情况,不确定该怎么做。 - TomGill
@TomGill,尝试从文件中读取,应该就可以了。 - Rahul

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