How to exclude certain tests in the Visual Studio

2019-01-18 02:15发布

I have attributes on certain tests that I ideally don't want to run on every build. Most of my tests are normal unit tests and I do want them to run on every build.

So: how can I exclude a test by category or project type?

For example, I'd like to exclude CodedUItests:

[CodedUITest]
public class SearchViewTests

...or exclude tests in a given TestCategory:

[TestMethod]
[TestCategory("Database Integration")]
public void ContactRepositoryGetByIdWithIdExpectCorrectContact()

I particularly want to exclude the coded UI tests as they disrupt my ability to continue working, whereas all the other tests will happily run in the background without disturbing me.

Originally this question was about Visual Studio 2012, so I'd prefer solutions that work in that version and higher.

7条回答
Fickle 薄情
2楼-- · 2019-01-18 02:32

You can use the search filter in Unit Text Explorer.

unit test explorer

In the new Test Exlorer shipped with 2012, you can group tests by 'Test Results', 'FileName',... etc but in RTM build group/search by 'TestCategory' is not present from Test Explorer. However there is a filter in commandline and TeamBuild based on TestCategory (Running selective unit tests in VS 2012 RC using TestCaseFilter) in VS2012.

From a member of VS dev Team, they understood the importance of this missing feature. It is in the backlog, and it should be available in furutre builds/updates.

The following blog provides more details: http://blogs.msdn.com/b/vikramagrawal/archive/2012/07/23/running-selective-unit-tests-in-vs-2012-rc-using-testcasefilter.aspx

查看更多
何必那么认真
3楼-- · 2019-01-18 02:44

A bit late to the partyI had the same issue where all developers were confronted with disruptive CodedUI when just running all unit tests in a solution. My workaround is to add the following to the AssemblyInitializer of the CodedUI Project:

    if(!ConfigurationManager.AppSettings["MachinesToRunCodedUI"].Split(',').Contains(Environment.MachineName))
        Assert.Inconclusive("CodedUI Tests are skipped.");

Only when a machine is part of that MachinesToRunCodedUI list, it will run the CodedUI tests.

查看更多
干净又极端
4楼-- · 2019-01-18 02:47

There's a filter you can apply on the Test Explorer. Trait:"UnitTest" this filter will pickup only the tests with TestCategory("UnitTest") attribute ignoring the others.

查看更多
霸刀☆藐视天下
5楼-- · 2019-01-18 02:48

The Visual Studio 2012 Update 1 CTP has added support for grouping by projects and categories (traits) to the Test Explorer. http://blogs.msdn.com/b/visualstudioalm/archive/2012/10/08/visual-studio-2012-update-1-ctp.aspx http://go.microsoft.com/fwlink/?LinkId=268021

查看更多
等我变得足够好
6楼-- · 2019-01-18 02:50

The only "solution" (or better workaround) I found to work is to specify a "FullName" filter. Basically I usually structure my solution like

  • ProjectA
  • ProjectA.UnitTests
  • ProjectA.IntegrationTests

and so on. Now I can specify a filter in the Test Explorer like FullName: "UnitTests" which seems to work.
(I'd expected to be able to use a regex within the search name but it doesn't seem to be supported.)

enter image description here

查看更多
【Aperson】
7楼-- · 2019-01-18 02:51

Have you seen this article? How to: Group and Run Automated Tests Using Test Categories

I haven't yet tried this with VS 2012, but it still might be valid. As far as I could see there are no references to TFS, so this should be pointing at the normal VS test runner.

查看更多
登录 后发表回答