如何使用Assert(或其他Test类?)来验证是否抛出了异常?
我正在使用Visual Studio 2010 Beta 2.我有一个[TestClass],有一个[TestInitialize],[TestCleanup]有几个[TestMethods].
每次运行测试方法时,都会运行初始化和清理方法!
我的印象中[TestInitialize]和[TestCleanup]应只运行一次,每次当地试运行.
那是对的吗?如果没有,这样做的正确方法是什么?
c# mstest visual-studio-2010 visual-studio vs-unit-testing-framework
NUnit有一个名为Values的功能,如下所示:
[Test]
public void MyTest(
[Values(1,2,3)] int x,
[Values("A","B")] string s)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
这意味着测试方法将运行6次:
MyTest(1, "A")
MyTest(1, "B")
MyTest(2, "A")
MyTest(2, "B")
MyTest(3, "A")
MyTest(3, "B")
Run Code Online (Sandbox Code Playgroud)
我们现在正在使用MSTest,是否有任何相同的功能,以便我可以使用多个参数运行相同的测试?
[TestMethod]
public void Mytest()
{
// ...
}
Run Code Online (Sandbox Code Playgroud) 在MSTest中TestInitializevs 之间有什么区别ClassInitialize?每个人的优点是什么?
我的印象是TestInitialze应该每次都进行EACH测试吗?那是对的吗?这ClassInitialize将每次运行任何类的新实例?
我有一个具有以下结构的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模板; 对我来说,我喜欢理解窗帘背后是什么,因为这让我成为了一个更好的程序员.
我依赖于为x64编译的混合模式程序集.因为我的构建中不需要警告,所以我的解决方案中的所有项目都直接针对x64 - 它们不是任何CPU.
为了让我的x64单元测试正常工作,我发现每次启动Visual Studio时都必须手动将Visual Studio单元测试默认处理器体系结构更改为x64.这很容易,但很乏味.
有没有办法让VS坚持这个设置,这样我每次都不必这样做?
我不确定我做了什么,但突然之间,我的Visual Studio 2012将不会调试任何测试.
如果我从Test Explorer中选择一个测试并告诉它运行,它只是在Test Output窗口输出:
> ------ Discover test started ------
> ========== Discover test finished: 29 found (0:00:01.3371755) ==========
> ------ Run test started ------ Process with an Id of -1 is not running.
> ========== Run test finished: 0 run (0:00:01.4711861) ==========
Run Code Online (Sandbox Code Playgroud)
这是什么意思?!执行此操作几次后,错误更改为:
The Operation was Cancelled
Run Code Online (Sandbox Code Playgroud)
我当然没有这样做.
它是在列表中的每个测试中执行此操作.
但是,我可以运行测试没有问题,他们通过...但我无法调试测试.
我可以做些什么?我没有主动进入任何设置并改变任何东西,也许是某个地方的流浪点击,但在哪里?
visual-studio visual-studio-debugging vs-unit-testing-framework visual-studio-2012 visual-studio-2017
我在TestBase类中添加了这些方法:
[ClassInitialize]
public static void InitializBeforeAllTests()
{
}
Run Code Online (Sandbox Code Playgroud)
但是当我在Debug中运行一个单元测试Test1():
[TestClass]
public class TestMapping : TestBase
{
[TestMethod]
public void Test1()
{
}
Run Code Online (Sandbox Code Playgroud)
TestBase.InitializBeforeAllTests()永远不会调用该方法.为什么?
我一直在努力争取这个,希望它会帮助别人.
虽然创建使用MSTEST单元测试我发现我在每个测试重复相同的码,并发现了几个方便的属性(的TestInitialize,TestCleanup,ClassInitialize,和ClassCleanup).
据推测,当您使用这些属性之一标记方法时,它应该自动执行(在每次测试之前,在每次测试之后,在所有测试之前,以及在所有测试之后).令人沮丧的是,这没有发生,我的测试失败了.如果从标有TestMethodattribute 的类中直接调用这些方法,则测试成功.显然他们不是自己执行的.
以下是我使用的一些示例代码:
[TestInitialize()]
private void Setup()
{
_factory = new Factory();
_factory.Start();
}
Run Code Online (Sandbox Code Playgroud)
那为什么不执行?
通过https://msdn.microsoft.com/en-us/library/jj635153.aspx阅读 我创建了一个.RunSettings文件,其中包含一些类似于示例的参数:
<TestRunParameters>
<Parameter name="webAppUrl" value="http://localhost" />
<Parameter name="webAppUserName" value="Admin" />
<Parameter name="webAppPassword" value="Password" />
</TestRunParameters>
Run Code Online (Sandbox Code Playgroud)
我计划.RunSettings为每个环境提供一个文件,其中包含适当的URL和凭据,用于在指定的RunSettings文件环境中运行CodedUI测试.
我可以看到从命令行引用我可以运行的设置文件:
vstest.console myTestDll.dll /Settings:Local.RunSettings /Logger:trx
vstest.console myTestDll.dll /Settings:QA.RunSettings /Logger:trx
Run Code Online (Sandbox Code Playgroud)
等等...
但我没有看到任何方式来调用如何TestRunParameters在codedUI测试中实际使用from.
我想要做的是设置测试初始化程序,使用它TestRunParameters来确定登录的位置以及要使用的凭据.像这样的东西:
[TestInitialize()]
public void MyTestInitialize()
{
// I'm unsure how to grab the RunSettings.TestRunParameters below
string entryUrl = ""; // TestRunParameters.webAppUrl
string userName = ""; // TestRunParameters.webAppUserName
string password = ""; // TestRunParameters.webAppPassword
LoginToPage(entryUrl, userName, password);
}
public void LoginToPage(string entryUrl, string …Run Code Online (Sandbox Code Playgroud) c# asp.net coded-ui-tests vs-unit-testing-framework runsettings