来自测试单元的App_Data路径?

时间:2016-12-08 23:26:34

标签: c# asp.net-web-api xunit.net

我在WebAPI2 Web服务上使用XUnit作为我的测试用例。 我有一个使用

获取App_Data目录的电话
AppDomain.CurrentDomain.GetData("DataDirectory").ToString();

当应用程序发布并正常运行时返回正确的路径,但是当我运行测试时,它不会返回App_Data目录的路径。

我得到了这个例外:Object reference not set to an instance of an object.

我有什么想法可以做到这一点?我试图在我的测试项目中添加一个App_Data目录,但它导致了同样的异常。

基本上,这是我为需要访问的加密实用程序存储XML配置文件的地方。我应该把它移到根部吗?如果我这样做,我将如何从我的测试单元访问它?

2 个答案:

答案 0 :(得分:2)

为此,我建议你抽象掉配置数据检索。

如果您需要更多方法,请使用一种或多种方法编写接口,例如:

public interface IConfigurationData 
{
    string RetrieveConfigurationData()
}

它的实现将转到磁盘上的App_Data文件夹。 在单元测试中,您可以模拟该接口,并使其检索测试所需的任何配置。

单元测试不应该触及任何外部系统,如文件或数据库或第三方API。你将它们抽象出来并使用像RhinoMocks,Moq或NSubstitute这样的东西来嘲笑它们。无论你喜欢什么。

原因是您希望您的单元测试尽快运行。在您引入实际系统(如文件)的那一刻,它们不再那么快,并且当您添加更多单元测试时,执行时间会不断增加。理想情况下,您希望您的单元测试在几秒钟内运行,因此您可以根据需要多次运行它们,而不会延迟开发过程。

答案 1 :(得分:-1)

如果您将配置复制到测试项目(作为app.config),然后使用System.Configuration.ConfigurationManager.AppSettings["SettingName"],那么当使用测试项目和{{1}运行时,它将从app.config中拉出来使用MVC项目运行时。