2012-05-23 29 views
7

我在写一些xUnit测试,它依赖于一些配置设置,通常存储在执行项目的App.config或Web.config中。Xunit的App.config

的配置是这样的:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <add key="FileNamePattern" value="\\d{8}_\\w{4:20}\.png"/> 
    <!-- and the likes --> 
    </appSettings> 
</configuration> 

我运行的xUnit 1.9与GUI亚军(xunit.gui.clr4.exe)和xUnit的控制台亚军(詹金斯CI服务器上)。目前,我可以通过手动设置xunit.gui.clr4.exe.config和xunit.console.exe.config文件将这些配置值“注入”到测试环境中;然而,这是乏味和容易出错的。

我也可以在夹具中模拟这些配置设置。但是,跨10个不同文件使用相同的夹具是相当重复的。

有没有更好的方法来用xUnit模拟这些配置设置,比如为测试项目提供一个App.config文件?

+1

我会创建一个中间ISettings。你可以加载app.config。然后,你需要做的就是使用像Moq这样的框架来模拟界面。我很喜欢尽可能地抽象出配置文件。 –

回答

10

如果你的代码假定他们在app.config,然后xUnit.net支持让他们通过提供一个(通常当测试是在一个DLL文件在那里有线了,这意味着你在项目的产出得到一个AssemblyName.dll.config文件如果运动员在加载时存在,运动员将加载该设置作为设置)。

很显然,使用DI原理来消除这种依赖关系并没有什么坏处,但我想说的是,在实际首先测试它之前,不要弄乱代码。

要保持干燥,请将app.config放在中心位置并将其添加为链接(通过对话框中的“打开”按钮上的箭头)。 (是的,有很多不尽如人意的地方是 - 只有当你觉得它是最邪恶的方法使用)


一眼就看出来的是,变化没有得到在GUI亚军,除非你重新加载请求重新装入程序集。

+0

当我将它重命名为TestNamespace.dll.config并将其设置为始终复制到构建目录时,配置工作正常。谢谢! –

+0

@ThachMai我会很惊讶,如果离开它作为app.config不会自动工作 - 我个人总是怀疑它,但我从来没有发现一个情况下,构建系统实际上没有复制/重命名 - 打开msbuild日志记录并看看(记住它不会被拿起,直到你重新加载)。 –

+0

我会试试看,下周二可以访问源代码。 –