我们正在使用VS2012和TFS2012并为我们的代码编写单元测试.我们希望报告代码覆盖率,并在测试应用程序的单元测试中使用.config文件,以及日志记录,MS企业库设置等的其他一些设置.
App.config无法在新的测试框架中工作
MS的新测试框架应该很棒,但对我来说它根本不是那么好.当新框架不再使用配置文件时,我想如何在配置文件中设置一些基本配置?
我们遇到混合模式dll的问题,并找到了一个修复:添加
<startup useLegacyV2RuntimeActivationPolicy="true">
Run Code Online (Sandbox Code Playgroud)
到app.config.但这对我们的单元测试项目不起作用.因为配置文件不再存在了.搜索互联网提出了一个解决方案
' Visual Studio .Net 4.5测试项目中的.Net 2.0混合模式程序集问题 '
这意味着在程序文件目录中编辑Visual Studio 11本身的文件,我认为这不是一个很好的解决方案....
一些基本的appsetting怎么样?我怎么设置这个?
不要使用.testSettings文件
MS也不推荐使用旧的.testsettings文件,因为使用了旧的测试框架.如果我使用.testsettings文件,我无法在我的tfs2012构建服务上设置代码覆盖率.
另一个问题是我们的代码需要一个dll(system.data.sqlite.dll),但只有在运行时单元测试代码才需要这个dll.因此不需要参考.我们使用testsettings文件中的Deployment选项卡修复了此问题.但是在新框架中,您不应该使用testsettings文件.如果需要文件,则具有[deploymentitem]属性.但deploymentitem属性只能用于[testmethial]或[assemblyinitialize]方法上的[testmethod].但是我们的代码需要[testinitialize]方法中的dll.所以没有办法让dll到位.
只是在[assemblyinitialize](或testinitialize)方法中使用File.Copy复制它不起作用.
将dll作为文件添加到项目中,并将"复制到输出目录"设置为"始终复制",如" 使用.runsettings文件配置单元测试 "中所述,也不起作用.
这个(真的不是很好的)解决方案是添加dll作为引用,然后实例化一个类,并且不要使用它.这样就需要dll,否则就不会构建,因此dll会将自己部署到正确的目录中.
如何解决我的问题? - 我想在单元测试中使用配置文件. - 我想在'assemblyinitialise'和/或'classinitialize'方法中部署一些neede文件. - 我希望在我的TFS2012每晚构建启用代码覆盖率.
我想在Visual Studio 2010中使用带有C#的DTE2对象来获得对当前解决方案的引用.
我首先尝试了以下代码:
var dte = Marshal.GetActiveObject("VisualStudio.DTE.10.0") as EnvDTE80.DTE2;
Run Code Online (Sandbox Code Playgroud)
但是当我打开2个解决方案,并且这个代码在第一个解决方案中时,我得不到对当前解决方案的引用,而是对我加载的最后一个解决方案的引用.我需要当前的解决方案......
在互联网上搜索,我发现以下解决方案如何从VSPackage获取当前的解决方案目录?:
// Get an instance of the currently running Visual Studio IDE
DTE dte = (DTE)GetService(typeof(DTE));
Run Code Online (Sandbox Code Playgroud)
但是当我使用它时,我的dte对象总是为NULL.
那么如何使用C#on .net framework 4.0获取VS2010中当前的解决方案对象?
我正在尝试创建一种在单元测试中测试字符串参数的简单方法,对于大多数字符串参数,我想在参数为Null,Empty或仅包含空格时检查行为.
在大多数情况下,我使用string.IsNullOrWhiteSpace()检查参数,如果它具有这三个值中的一个,则抛出异常.
现在进行单元测试,似乎我必须为每个字符串参数编写三个单元测试.一个用于空值,一个用于空值,一个用于空白.
想象一个带有3或4个字符串参数的方法,然后我需要编写9或12个单元测试...
任何人都可以想出一个简单的方法来测试这个吗?也许使用AutoFixture?
在安装过程中,我需要在自定义操作中添加一些额外的文件,这些文件在 InstallExecuteSequence 标记中配置为 After="InstallFinalize"。
使用文件后,我希望删除文件(和目录)。
我怎样才能做到这一点?
我的 InstallExecuteSequence 看起来像这样:
<InstallExecuteSequence>
<Custom Action="UNINSTALLSERVICE"
After="InstallInitialize">REMOVE="ALL"</Custom>
<Custom Action="CLEANUP"
Before="RemoveFiles">REMOVE="ALL"</Custom>
<Custom Action="INSTALLSERVICE"
After="InstallFinalize" />
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)
如果我创建一个自定义操作
ExeCommand="cmd /C RD "somedir" /s /q"
Run Code Online (Sandbox Code Playgroud)
并将其添加到序列中,如下所示:
<Custom Action="CLEANTEMP" After="InstallFinalize" />
Run Code Online (Sandbox Code Playgroud)
我收到构建错误:
Error 596 ICE77: CLEANCONFIG is a in-script custom action.
It must be sequenced in between the InstallInitialize action
and the InstallFinalize action in the InstallExecuteSequence table
Run Code Online (Sandbox Code Playgroud) 我喜欢用具有多个属性的对象对数组进行排序。我的对象有一个名为 name 的字符串和一个名为 required 的布尔值。
首先我想按年龄排序,然后按名字排序。
我该怎么做呢?
按年龄订购很容易...:
this.model.mylist.sort((obj1: IObj, obj2: IObj => {
if (obj1.age < obj2.age) {
return -1;
}
if (obj1.age > obj2.age) {
return 1;
}
return 0;
});
Run Code Online (Sandbox Code Playgroud) 我在接口上有一个方法:
void HandleError(MyClasss c, object o, Exception e);
Run Code Online (Sandbox Code Playgroud)
我想用最小起订量来模拟这个,并在任何参数上抛出提供的Exception e。
就像是:
_mock.Setup(a => a.HandlreError(It.IsAny<MyClass>(), It.IsAny<object>()
, It.IsAny<Exception>())).Throws( [the 'any' exception] )
Run Code Online (Sandbox Code Playgroud) c# ×3
unit-testing ×3
add-in ×1
arrays ×1
autofixture ×1
envdte ×1
installation ×1
moq ×1
sorting ×1
tfs2012 ×1
typescript ×1
wix ×1