我将XUnit用于WebAPI2 web服务上的测试用例。我有一个调用来获取App_Data目录
AppDomain.CurrentDomain.GetData("DataDirectory").ToString();这将在发布应用程序并正常运行时返回正确的路径,但是,当我运行测试时,它将不会将路径返回到App_Data目录。
我得到了一个例外:Object reference not set to an instance of an object.
知道我该怎么做吗?我试图将一个App_Data目录添加到我的测试项目中,但是它导致了同样的异常。
本质上,这就是我为需要访问的加密实用程序存储XML配置文件的地方。我应该把它移到根部吗?如果我这样做,我将如何从我的测试单元访问它?
发布于 2016-12-09 22:23:02
如果您将配置复制到测试项目(作为app.config),然后使用System.Configuration.ConfigurationManager.AppSettings["SettingName"],它将在使用测试项目运行时从app.config中提取,在使用MVC项目运行时将从web.config中提取。
发布于 2016-12-09 00:03:57
为此,我建议您抽象出配置数据检索。
如果需要更多的方法,可以使用一个或多个方法编写一个接口,如下所示:
public interface IConfigurationData
{
string RetrieveConfigurationData()
}实现将转到磁盘上的App_Data文件夹。在单元测试中,您模拟该接口,并使它检索测试所需的任何配置。
单元测试不应该触及任何外部系统,比如文件、数据库或第三方API。您可以将它们抽象出来,并使用类似于RhinoMocks、Moq或NSubstitute之类的工具来嘲弄它们。
这样做的原因是您希望您的单元测试尽快运行。当您介绍一个实际的系统时,就像文件一样,它们不再那么快了,当您添加更多的单元测试时,执行时间就会不断增加。理想情况下,您希望您的单元测试在几秒钟内运行,这样您就可以在不延迟开发过程的情况下多次运行它们。
https://stackoverflow.com/questions/41050632
复制相似问题