MSTest: группировка тестов

#c# #.net #visual-studio #mstest

#c# #.net #visual-studio #mstest

Вопрос:

Я настраиваю набор UnitTest с использованием MSTest для существующего приложения.

Приложение поддерживает две разные базы данных (SQLServer и MSAccess), поэтому мы хотим, чтобы каждый модульный тест выполнялся для обеих баз данных.

Я вроде бы достиг этой функциональности с помощью следующей конструкции класса

 namespace SQLServer {
    [TestClass] public class SQLServer : TestCases { }
}
namespace MSAccess {
    [TestClass] public class MSAccess : TestCases { }
}

public abstract partial class TestCases {
    //Tests for Module1
    [TestMethod] public void Module1_Test1() { }

}
public abstract partial class TestCases {
    //Tests for Module2
    [TestMethod] public void Module2_Test1() { }
}
 

Это работает более или менее так, как ожидалось, но, конечно, это не очень приятно, потому что все TestMethod s должны быть в одном классе. Недостатком также является то, что два TestMethod s для разных модулей не могут иметь одно и то же имя, что делает имена методов излишне длинными.

Однако моя главная проблема заключается в том, что я теряю группировку TestMethod s по модулю. Группировка в Test Explorer, которую я достигаю с помощью этого:

 UnitTestProject (Project name)
  UnitTestProject.SQLServer (Namespace name)
    SQLServer (Class name)
      Module1_Test1 (Function name)
      Module2_Test1
  UnitTestProject.MSAcccess
    MSAccess
      Module1_Test1
      Module2_Test1
 

Чего я на самом деле хочу, так это:

 UnitTestProject 
  SQLServer
    Module1
      Module1_Test1
    Module2
      Module2_Test1
  MSAccess
    Module1
      Module1_Test1
    Module2
      Module2_Test1
 

Есть ли способ добиться этого?

Ответ №1:

Используйте TestCategory атрибут и убедитесь, что ваши тесты сгруппированы по признакам в окне обозревателя тестов.

Комментарии:

1. Похоже, это группирует их только по признаку. При группировке по признакам каждый тест существует дважды в каждом признаке, потому что они наследуются двумя базовыми классами. Он не дает группировку как по типу DB, так и по TestCategory