标签: mstest

Visual Studio:在单个项目中运行所有测试?

在我的Visual Studio解决方案中,我有大约十几个项目,其中几个包含单元测试方法(用TestMethod属性标记),并在这些项目中分布了数百个测试方法.

在Visual Studio中,我想在解决方案中的一个特定项目中运行所有(100+)测试,而不在解决方案中的其他项目中运行测试.

Ctrl+ R,A没有做我想要的,因为它在整个解决方案中运行所有测试.我也没有看到任何选项在"测试"菜单,"测试资源管理器"窗口或"解决方案资源管理器"窗口中项目的右键单击上下文菜单中的特定项目中运行测试.

我正在使用Visual Studio 2013.

让Visual Studio在特定项目中运行所有测试方法的最佳方法是什么?

unit-testing mstest visual-studio visual-studio-2013

38
推荐指数
1
解决办法
9573
查看次数

在NUnit中我能做些什么在MSTest中无法做到吗?

在许多不同的论坛中已经以各种形式提出了这个问题,但是,恕我直言,我还没有找到一个真正回答清楚的地方,所以我要重新构思并再次提问.

我在一个基本的微软商店工作.我们使用TFS,我们所有的开发人员都有MSDN订阅,包括VS的Team Suite版本.所以我们可以访问MSTest.

我已经阅读了各种NUnit与MSTest的比较,而开发者社区似乎非常注重选择NUnit.但至少对我们的情况来说,给出的理由似乎并不是压倒性的或令人信服的.(NUnit更频繁更新,NUnit更快,NUnit不需要TFS等)

如果我选择的话,我可以使用NUnit,但是必须保护使用没有正式支持的开源软件.我需要一个相当令人信服的理由这样做.

我基本上必须回答的是为了证明使用NUnit优先于MSTest是这样的:在NUnit中我能做些什么,我在MSTest中无法做同样的努力吗?

nunit mstest

36
推荐指数
5
解决办法
7512
查看次数

我怎样才能让Resharper在调试中运行测试,当我得到调试时"不确定:测试不运行"

我怎样才能让Resharper在调试中运行测试,当我得到调试时"不确定:测试不运行"

在Resharper测试运行器中运行任何MsTest测试都没问题,但如果我尝试调试,则只显示R#测试运行器 Inconclusive: Test not run

即使通过简单的测试,例如,这也会发生

[TestClass]
public class BasicTests
{
    [TestMethod]
    public void Placeholder()
    {
        Assert.AreEqual(1, 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

但Visual Studio中的内置测试运行器适用于刚运行和调试

附加信息: 它似乎只发生在我的VS 2017预览实例中!

附加信息: 它似乎也出现在我的VS 2017中,最近更新了3!

c# resharper mstest resharper-2017

36
推荐指数
2
解决办法
5307
查看次数

Assert.AreEqual如何确定两个通用IEnumebles之间的相等性?

我有一个单元测试来检查方法是否返回正确的IEnumerable.该方法使用构建可枚举的yield return.它是可枚举的类如下:

enum TokenType
{
    NUMBER,
    COMMAND,
    ARITHMETIC,
}

internal class Token
{
    public TokenType type { get; set; }
    public string text { get; set; }
    public static bool operator == (Token lh, Token rh) { return (lh.type == rh.type) && (lh.text == rh.text); }
    public static bool operator != (Token lh, Token rh) { return !(lh == rh); }
    public override int GetHashCode()
    {
        return text.GetHashCode() % type.GetHashCode();
    }
    public override bool Equals(object obj) …
Run Code Online (Sandbox Code Playgroud)

c# ienumerable unit-testing assert mstest

35
推荐指数
4
解决办法
3万
查看次数

在MSTest中,如何使用[ExpectedException(typeof(ApplicationException))]验证确切的错误消息

使用MSTest如何验证来自测试方法的确切错误消息?我知道[ExpectedException(typeof(ApplicationException), error msg)]不会比较来自我的测试方法的错误消息,尽管在其他单元测试框架中它正在做.

解决这个问题的一种方法是使用一些try catch块编写单元测试,但是我需要再写4行.

有没有最聪明的方法来检查错误消息.

干杯,Pritam

automation unit-testing mstest

35
推荐指数
7
解决办法
9577
查看次数

将自定义消息添加到单元测试结果

有没有办法可以在测试方法的结果中添加自定义消息?我想在代码的一部分上放一个秒表,看看它的运行时间.我不需要测试它是否在某个时间范围内运行,只是想在结果窗口中看到经过的时间是多少.

c# unit-testing mstest visual-studio-2010

35
推荐指数
3
解决办法
3万
查看次数

MsTest - 在程序集中的每个测试之前执行方法

是否可以在装配中的每个测试之前运行特定方法?

我知道TestInitialize属性,但这个属性有"类范围".如果它在Test类中定义,它将在此类的每个测试之前执行.

我想定义一个方法,该方法将在整个程序集中定义的每个测试之前执行.

.net mstest

34
推荐指数
3
解决办法
2万
查看次数

MSTest和app.config问题

我试图通过MSTest和app.config的部署来自动运行单元测试.我阅读了多个帖子和博客,尝试了多项内容,但在MSTest执行期间,似乎仍然没有选择app.config.有一个包含我用msbuild构建的所有单元测试的dll,这是我试过的...

尝试1

  1. 将app.config复制到MyTests.dll作为MyTests.dll.config的同一位置(在其中一个msdn论坛上,它被称为自动拾取)
  2. [DeploymentItem("MyTests.dll.config")]为每个测试添加了属性
  3. MSTest.exe /noisolation /testcontainer:d:\MyTestTests.dll /test:MyTest

尝试2

  1. 创建具有以下内容的local.testrunco​​nfig文件(如下)
  2. 使用/ runco​​nfig执行mstest并且没有隔离,但没有执行任何操作: MSTest.exe /runconfig:d:\local.testrunconfig /testcontainer:d:\MyTestTests.dll /test:MyTest

结果: 正在加载d:\ local.testrunco​​nfig ...
d:\ local.testrunco​​nfig
d:\ local.testrunco​​nfig

......没有任何反应:没有错误,没有执行任何测试!


编辑/解决方案:默认情况下,MSTest在单独的进程中执行测试.在这种情况下,如果配置文件的名称类似于"dllname.dll.config",则会自动获取配置文件.但是,如果在VS之外运行,则很难调试在单独进程中运行的测试./ noisolation开关用于使MSTest在一个进程中运行所有测试.但是,在这种情况下,不会选择测试配置文件.而是使用MSTest.exe.config文件,该文件与MSTest位于同一目录中.要解决此问题,可以像下面这样实际加载配置文件:


ExeConfigurationFileMap map = new ExeConfigurationFileMap();
map.ExeConfigFilename = @"path to config file";
Configuration config = 
   ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
Run Code Online (Sandbox Code Playgroud)

c# msbuild mstest app-config

34
推荐指数
2
解决办法
2万
查看次数

强制MSTest使用单个线程

鉴于此测试夹具:

[TestClass]
public class MSTestThreads
{
    [TestMethod]
    public void Test1()
    {
        Trace.WriteLine(Thread.CurrentThread.ManagedThreadId);
    }

    [TestMethod]
    public void Test2()
    {
        Trace.WriteLine(Thread.CurrentThread.ManagedThreadId);
    }
}
Run Code Online (Sandbox Code Playgroud)

使用MSTest通过Visual Studio或命令行运行测试会打印两个不同的线程号(但它们仍然按顺序运行).

有没有办法强制MSTest使用单个线程运行它们?

unit-testing mstest visual-studio

34
推荐指数
2
解决办法
2万
查看次数

CollectionAssert与泛型一起使用?

它似乎CollectionAssert不能与泛型一起使用.这太令人沮丧了; 我想测试的代码确实使用了泛型.我是什么做的?写样板文件在两者之间转换?手动检查集合等价?

这失败了:

ICollection<IDictionary<string, string>> expected = // ...

IEnumerable<IDictionary<string, string>> actual = // ...

// error 1 and 2 here
CollectionAssert.AreEqual(expected.GetEnumerator().ToList(), actual.ToList());

// error 3 here
Assert.IsTrue(expected.GetEnumerator().SequenceEquals(actual));
Run Code Online (Sandbox Code Playgroud)

编译器错误:

错误1:

'System.Collections.Generic.IEnumerator>'不包含'ToList'的定义,并且没有可以找到接受类型'System.Collections.Generic.IEnumerator>'的第一个参数的扩展方法'ToList'

错误2

'System.Collections.Generic.IEnumerator>'不包含'ToList'的定义,并且没有可以找到接受类型'System.Collections.Generic.IEnumerator>'的第一个参数的扩展方法'ToList'

错误3

'System.Collections.Generic.IEnumerator>'不包含'SequenceEquals'的定义,并且没有可以找到接受类型'System.Collections.Generic.IEnumerator>'的第一个参数的扩展方法'SequenceEquals'

我究竟做错了什么?我没有正确使用扩展程序吗?

更新:好的,这看起来好一点,但仍然不起作用:

IEnumerable<IDictionary<string, string>> expected = // ...

IEnumerable<IDictionary<string, string>> actual = // ...

CollectionAssert.AreEquivalent(expected.ToList(), actual.ToList()); // fails
CollectionAssert.IsSubsetOf(expected.ToList(), actual.ToList()); // fails
Run Code Online (Sandbox Code Playgroud)

我不想比较名单; 我只关心集合成员平等.成员的顺序并不重要.我怎么能绕过这个?

.net c# generics unit-testing mstest

33
推荐指数
3
解决办法
1万
查看次数