App_Data 来自测试单元的路径?

App_Data Path from test unit?

我在 WebAPI2 网络服务上使用 XUnit 测试用例。 我有一个电话要使用

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

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

我得到这个异常:Object reference not set to an instance of an object.

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

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

为此,我建议您抽象出配置数据检索。

用一个或多个方法编写一个接口,如果你需要更多,比如:

public interface IConfigurationData 
{
    string RetrieveConfigurationData()
}

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

单元测试不应接触任何外部系统,例如文件或数据库或第三方 API。您可以将它们抽象出来并使用 RhinoMocks、Moq 或 NSubstitute 之类的东西模拟它们,无论您喜欢什么。

这样做的原因是您希望单元测试尽快 运行。一旦你引入一个实际的系统,比如一个文件,它们就不再那么快了,而且随着你添加更多的单元测试,执行时间会不断增加。理想情况下,您希望单元测试在几秒钟内完成 运行,因此您可以根据需要多次 运行,而不会延迟开发过程。

如果您将配置复制到测试项目(作为 app.config)然后使用 System.Configuration.ConfigurationManager.AppSettings["SettingName"],它将在 运行 使用时从 app.config 中提取测试项目和 web.config 当 运行 使用 MVC 项目时。