我正在为这样的控制器编写单元测试:
public HttpResponseMessage PostLogin(LoginModel model)
{
if (!ModelState.IsValid)
return new HttpResponseMessage(HttpStatusCode.BadRequest);
}
Run Code Online (Sandbox Code Playgroud)
该模型看起来像:
public class LoginModel
{
[Required]
public string Username { set; get; }
[Required]
public string Password { set; get; }
}
Run Code Online (Sandbox Code Playgroud)
然后我就像这样进行单元测试:
[TestMethod]
public void TestLogin_InvalidModel()
{
AccountController controller = CreateAccountController();
...
var response = controller.PostLogin(new LoginModel() { });
Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
}
Run Code Online (Sandbox Code Playgroud)
实际上ModelState已经过验证......这对我来说很奇怪,因为这两个字段都是必需的......有人可以建议吗?
c# unit-testing model-validation vs-unit-testing-framework asp.net-web-api
我有一个编译好的C#.NET类库MyClassLibrary.我正在尝试为它创建一个单元测试项目(使用Visual Studio单元测试框架,使用Visual Studio 2010).类库中确实有大类,但每当我针对最简单的类运行最简单的测试时,我会得到以下异常:
测试方法MyClassLibraryTest.MyClassLibraryTests.MySimpleClassTest引发异常:System.TypeLoadException:无法从程序集"MyClassLibrary,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null"加载类型"MyClassLibrary.MySimpleClass".
我正在处理的所有项目都在同一个解决方案中,所有项目都是针对.NET 4.0编译的.所有这些都在Windows 7 64位计算机上.
这是奇怪的部分:当我" 运行 "测试时,我得到上述错误.但是当我" 调试 "测试时,它运行正常.为什么?
我正在使用Visual Studio Enterprise 2017来开发我的.net核心项目.
我的解决方案还有一些单元测试项目,我想查看我目前的代码覆盖率.
当我单击测试 - >分析代码覆盖率 - >所有测试时.我的所有单元测试都在运行,但在代码覆盖率结果中,它只报告了我的单元测试项目的代码覆盖率,这对我没有任何意义.
问题1:你们和我一起遇到同样的问题吗?对此有何解决方案?我还需要在VSTS中设置构建定义以报告代码覆盖率.
问题2:当我右键单击调试我的单元测试时.它执行我的所有单元测试.这是VS2017中的错误吗?
Update1:我找到了这个主题:https://github.com/Microsoft/vstest/issues/597
code-coverage xunit vs-unit-testing-framework visual-studio-2017
当试图打开旧的解决方案时,VS2017有一个旧的单元测试项目在构建时给我一个问题.
构建此测试项目时,我不断收到以下错误:
无法加载文件或程序集'file:/// C:\ Projects\MyProj\Test\DAL\UnitTestProj\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll'或其依赖项之一.该系统找不到指定的文件.
我检查了项目的引用,它似乎是引用Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll.此外,没有代码错误.我怎么能弄清楚它是否是它无法找到的依赖项之一?
.net asp.net visual-studio vs-unit-testing-framework visual-studio-2017
我有一个.NET 4.0 WPF解决方案,其中包含一个单元测试项目,用于测试视图模型中使用的不同命令.一切都很好.然后我安装了.NET framework 4.5然后安装了VS2012,并开始收到如下错误消息 -
XYZProject.UsersViewModel_Accessor.AddUserToAccountsCommand' is not supported by the language
在安装VS2012之前UnitTestFramework.dll,引用了 -
C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\
被改为引用 -
C:\Program Files\Microsoft Visual Studio 11.0\Common7\IDE\ReferenceAssemblies\v4.0
所以它从VS2012中获取了引用,我手动恢复了该引用.但没有运气.
这AddUserToAccountsCommand是一个ICommand驻留在PresentationCore.dll.NET 4.0中的对象,但是System.dll在.NET 4.5中.所以我也检查了这些参考文献,它们似乎就像以前一样.
错误消息仅显示创建测试目标的位置,如Access,例如UsersViewModel_Accessor,表示以下代码生成错误 -
UsersViewModel_Accessor target = new UsersViewModel_Accessor();
Assert.IsTrue(target.AddUserToAccountsCommand.CanExecute(null), "Failed to perform can exetuce of add user command");
target.AddUserToAccountsCommand.Execute(null);
Run Code Online (Sandbox Code Playgroud)
但如果使用viewmodel类型直接创建测试目标,如下所示 -
UsersViewModel target = new UsersViewModel();
Assert.IsTrue(target.AddUserToAccountsCommand.CanExecute(null), "Failed to perform can exetuce of add user command");
target.AddUserToAccountsCommand.Execute(null);
Run Code Online (Sandbox Code Playgroud)
没有错误发生,项目构建成功.那么,有人可以分享任何想法吗? …
在为包含多个项目的解决方案运行代码覆盖时,我注意到Code Coverage还包括我的测试程序集.
我发现了一篇文章,建议使用.runsettings的以下模板:
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<DataCollectionRunSettings>
<DataCollectors>
<DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<Configuration>
<CodeCoverage>
<ModulePaths>
<Include>
<!-- Do not specify any includes. This will attempt to include all binaries -->
</Include>
<Exclude>
<!-- Exclude modules that aren't to be processed, by their name / path -->
<ModulePath>.*Tests\.dll$</ModulePath> <!-- I put it here -->
</Exclude>
</ModulePaths>
<UseVerifiableInstrumentation>True</UseVerifiableInstrumentation>
<AllowLowIntegrityProcesses>True</AllowLowIntegrityProcesses>
<CollectFromChildProcesses>True</CollectFromChildProcesses>
<CollectAspDotNet>False</CollectAspDotNet>
<!--
Additional paths to search for symbol files. Symbols must be found for modules to …Run Code Online (Sandbox Code Playgroud) .net unit-testing code-coverage visual-studio vs-unit-testing-framework
我MS unit testing framework用来测试我的C#库.我必须打开一个我正在部署的文件DeploymentItem attribute.但它没有将文件部署到Test部署目录.
在我的Unit-test项目中,我TestFile在这个文件夹中创建了一个文件夹,里面有多个文件,比如a.txt,b.txt.
现在在我的Unit-test类中,我添加了DeploymentItem属性.但文件没有被复制.
这是我的代码.
[TestClass]
[DeploymentItem("TestFile")]
public class CustomLibraryTest
{
public TestContext TestContext { get; set; }
[TestMethod]
[DeploymentItem(@"TestFiles\a.txt")] // THis should deploy a.txt to test deployment directory
{
var path = TestContext.TestDeploymentDir + "a.txt";
// Now when I debug this unit-test, and open path in explorer,
// a.txt is not present in "TestResults\Deploy_fhafeez 2013-05-28 13_02_37\Out" folder
}
}
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
c# unit-testing deploymentitem vs-unit-testing-framework visual-studio-2012
我以前能够在VS 2012中运行单元测试.现在,突然之间,无论我尝试"运行"还是"调试"任何单元测试,单元测试会话窗口都会将测试置于"待定"状态,但是从来没有真正执行它.
我已经尝试重新启动我的开发环境,甚至重新启动计算机.没变.
那么秘密设置在哪里说"让单元测试冻结'待定'"?
c# resharper unit-testing vs-unit-testing-framework visual-studio-2012
是否可以将通配符testcontainer值传递给命令行mstest.exe而不是手动硬编码多个testcontainer值?如
Mstest.exe/testcontainer:测试 .dll
我想在我们的tfs 2012升级template.xaml构建过程中手动调用mstest,因为它的行为类似于在默认模板中运行测试的自动发现方式.
如果没有,这可以写入bat脚本循环从给定的开始文件夹中的文件夹?
tfs mstest tfsbuild vs-unit-testing-framework visual-studio-2012
使用Visual Studio单元测试框架,我正在考虑两个选项:
Assert.AreEqual(myObject.GetType(), typeof(MyObject));
Run Code Online (Sandbox Code Playgroud)
和
Assert.IsInstanceOfType(myObject, typeof(MyObject));
Run Code Online (Sandbox Code Playgroud)
这两个选项之间有区别吗?一个比另一个更"正确"吗?
这样做的标准方法是什么?