我似乎无法掌握如何配置MSTest部署项.我已经能够通过修改项目的测试设置文件来使它们正常工作,但这不太理想 - 部署项配置与单个测试分开,文件路径似乎存储为绝对路径,除非文件是在解决方案文件夹下.
难道我不应该能够添加使用部署项目[DeploymentItem]上无论是属性[TestClass]还是[TestMethod]无需创建/修改项目的测试设置文件?我该如何做到这一点?
(坦率地说,我不明白是否需要单独的部署项配置 - 为什么不使用现有的"复制到输出目录"设置来处理应该是部署项目的项目文件?)
我正在为这个返回"void"的方法编写一个单元测试.我希望有一个案例,当没有异常抛出时,测试通过.我如何用C#编写?
Assert.IsTrue(????)
Run Code Online (Sandbox Code Playgroud)
(我猜这是我应该检查的,但是什么进入"???")
我希望我的问题很清楚.
我公司正在将Visual Studio 2012升级到2013 Premium.在此期间,我们还希望使用Visual Studio Team Services开始自动化测试
我过去读过几篇MSTest vs nUnit的帖子和文章,但大多数都比较了旧版的MSTest.此外,与MSTest相比,nUnit有很多有利的评论.
我的问题是,考虑到微软对ALM的承诺,敏捷实践以及他们为VS2013 Premium和Visual Studio Team Services添加的所有新内容以促进和鼓励自动化测试,MSTest与nUnit相比如何?
在决定使用测试框架之前,我还应该考虑哪些其他因素?
在MSTest中TestInitializevs 之间有什么区别ClassInitialize?每个人的优点是什么?
我的印象是TestInitialze应该每次都进行EACH测试吗?那是对的吗?这ClassInitialize将每次运行任何类的新实例?
如果我在Visual Studio 2008中打开一个解决方案并运行单元测试,那么VS会在Solution Items文件夹中创建一个新的.vsmdi文件,并为其提供下一个可用的编号,例如My Solution2.vsmdi.
知道为什么VS这样做以及如何让它停止这样做?
我有一个具有以下结构的ac#解决方案:
mySolution
myProject
myProject.MSTests
References
Microsoft.VisualStudio.QualityTools.UnitTestFramework
sutMSTests.cs
Run Code Online (Sandbox Code Playgroud)
sutMSTests.cs:
[TestClass()]
public class sutMSTests
{
[TestMethod]
public void MyTest0()
{
Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual(4, 2 + 2);
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试通过Test,Run,All Tests In Solution运行测试时,我在VS2008状态行上得到以下信息:
未运行任何测试,因为未加载任何测试或禁用所选测试.
测试,Windows,测试视图显示没有测试.
注意:我手动创建了测试(适用于xUnit.net),而不是使用Microsoft的向导.
我将手工创建的MSTest设置与我使用向导生成的另一个测试设置进行了比较,它们看起来非常相似.
问题:上述错误消息的最可能原因是什么?
编辑2010-02-25: 更多信息:
我右键单击Solution Items文件夹,然后选择Add,New Project,键入Test Projects,Test Documents :: Visual Studio Test Project模板.
新项目的默认设置不会检测并传递测试"TestMethod1".
但是,我的测试没有显示...所以我将我的测试方法复制并粘贴到默认的测试测试项目"TestProject1"中.
我的测试是在"TestProject"中检测到的,但不是在原始位置.
我仔细比较了"TestProject1"的文件,组织和设置与我手工创建的测试项目.
此时,我猜测某些设置是由Visual Studio Test Project模板制作的,不易检测到.
imo,手动创建测试项目就像使用Visual Studio Test Project模板创建测试项目一样容易.
请注意:我并不是说我反对使用Visual Studio Test Project模板; 对我来说,我喜欢理解窗帘背后是什么,因为这让我成为了一个更好的程序员.
我需要从命令行运行mstest - 这个exe位于世界的哪个位置?任何人都可以给我一个线索吗?
编辑:我只安装了Visual Studio 2010
我刚刚将xUnit添加到我们的测试项目中(对于Asserts,我们仍然使用MSTest作为框架)并且测试运行立即拒绝执行任何测试.这是错误消息:
无法对测试运行"{....}"进行排队测试运行部署问题:文件或目录"... xUnit.dll"的位置不受信任.
我们有一个使用Entity Framework 5的Visual Studio 2012 ASP.NET MVC项目.
有些单元测试依赖于数据库.在测试项目中设置app.config文件以使用中央SQL Server数据库可以正常工作.
但是,使用LocalDb会更好,因此每个开发人员在运行测试时都有自己的数据库.特别是因为我们希望DropCreateDatabaseAlways在运行时设置测试.
但是,我无法让设置工作.如果我在app.config中尝试这个:
<add name="TestDb"
connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=unittestdb;
Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\unittestdb.mdf"
providerName="System.Data.SqlClient" />
Run Code Online (Sandbox Code Playgroud)
我明白了:
System.Data.SqlClient.SqlException:发生文件激活错误.物理文件名'\ unittestdb.mdf'可能不正确.诊断并更正其他错误,然后重试该操作.CREATE DATABASE失败.无法创建列出的某些文件名.检查相关错误.
听起来它想要mdf文件已经存在,这似乎很奇怪,因为它试图创建数据库.手动创建mdf文件不会更改错误消息.
unit-testing mstest entity-framework-5 localdb visual-studio-2012
我有一个测试的基类,它由以下方式组成:
[TestClass]
public abstract class MyBaseTest
{
protected static string myField = "";
[ClassInitialize]
public static void ClassInitialize(TestContext context)
{
// static field initialization
myField = "new value";
}
}
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试创建一个继承自base的新测试,具有以下签名:
[TestClass]
public class MyTest : MyBaseTest
{
[TestMethod]
public void BaseMethod_ShouldHave_FieldInitialized()
{
Assert.IsTrue(myField == "new value");
}
}
Run Code Online (Sandbox Code Playgroud)
将ClassInitialize永远不会被孩子所谓的测试...什么是真实的,正确的使用测试初始化与MSTest的继承方式?