Testes de criação em C#
O exemplo abaixo mostra um arquivo C# .cs com uma classe de teste simples e única que demonstra a marcação de testes de C#. (Esse exemplo é apenas para fins de demonstração, portanto, ele não será compilado nem executado.)
1 using Microsoft.VisualStudio.TestTools.UnitTesting;
2 using System;
3 using System.Collections;
4 using WEX.Logging.Interop;
5 using WEX.TestExecution;
6
7 [TestClass]
8 public class ManagedStartMenuTests
9 {
10 [AssemblyInitialize]
11 [TestProperty("Component", "Navigation")]
12 [TestProperty("SubComponent", "StartMenu")]
13 public static void RunModuleSetup(Object context)
14 {
15 defaultPolicy = SetObjectFactoryPolicy(PolicyClassic);
16 }
17
18 [AssemblyCleanup]
19 public static void RunModuleCleanup()
20 {
21 SetObjectFactoryPolicy(defaultPolicy);
22 }
23
24 [ClassInitialize]
25 [TestProperty("TeamOwner", "WEX")]
26 [TestProperty("GroupOwner", "MediaPlayerTest")]
27 public static void TestClassSetup(Object testContext)
28 {
29 objectFactory = new ObjectFactory();
30 }
31
32 [ClassCleanup]
33 public static void TestClassCleanup()
34 {
35 objectFactory.Dispose();
36 }
37
38 [TestInitialize]
39 public void TestMethodSetup()
40 {
41 startMenuObject = objectFactory.CreateObject();
42 }
43
44 [TestCleanup]
45 public void TestMethodCleanup()
46 {
47 startMenuObject.Dispose();
48 }
49
50
51 [TestMethod]
52 [Owner("Someone")]
53 [Priority(0)]
54 public void TestMethod1()
55 {
56 Verify.AreEqual(startMenuObject.size, expectedObjectSize);
57 }
58 }
Para declarar testes de C#, o TAEF usa a marcação de teste VSTS.
Para declarar uma classe de teste em C#, use o atributo [TestClass] em uma classe C# comum (Linha 7) e, para uma declaração de método de teste, use o atributo [TestMethod] em um método de classe comum (Linha 51).
A marcação de teste C# também oferece suporte a uma gama completa de métodos de configuração e limpeza.
O método estático com o conjunto de atributos [AssemblyInitialize] é executado antes de qualquer outro método de classe e executa a inicialização no nível de assembly (Linha 10). Consequentemente, há um método de limpeza de assembly, um método estático com o conjunto de atributos [AssemblyCleanup] que é executado após a conclusão de todos os outros métodos (Linha 18).
Da mesma forma, existem métodos de configuração e limpeza de classe e teste. (ver linhas 24, 32, 38, 44) Ao contrário do C++, a configuração de classe e os métodos de limpeza no código gerenciado devem ser estáticos.
A marcação de teste do TAEF C# oferece suporte a propriedades de teste, classe e módulo.
Para definir propriedades de módulo, defina atributos em um inicializador de assembly (consulte as linhas 11 e 12). Da mesma forma que definir propriedades de nível de classe, defina propriedades em um inicializador de classe (consulte as linhas 25 e 26). Para uma propriedade de nível de método de teste, basta aplicar a propriedade a um método de teste específico. (consulte as linhas 52 e 53)
Executar em VSTS
Observação: para reduzir a dependência dos binários do VSTS, atualmente os métodos de configuração de Classe e Assembly usam Object como um primeiro parâmetro.
Se você quiser executar os testes do VSTS, altere esse tipo de objeto para o tipo TestContext. Lembre-se de que isso adicionará uma dependência de microsoft.visualstudio.qualitytools.unittestframework.dll e microsoft.visualstudio.qualitytools.resource.dll.
As etapas são um pouco diferentes durante a execução no VSTS. Você precisa configurar suas configurações de execução de teste local para copiar suas dependências não gerenciadas. Para isso, acesse:
- Teste->Editar as configurações de execução de teste->execução de teste local
- Clique em Deployment. Insira as dlls que você precisa copiar para cada teste:
- Wex.Logger.dll
- Wex.Common.dll
- Wex.Common.Managed.dll
- Wex.Communication.dll
- Wex.Logger.Interop.dll
Isso é necessário devido ao fato de que o VSTS cria um novo diretório e copia arquivos toda vez que executa seus casos de teste. Você pode ver esses diretórios em sua máquina como pasta irmã para sua pasta de projeto.
Executar testes gerenciados no domínio de aplicativo padrão
Por padrão, para isolamento de código de teste, o TAEF executa testes gerenciados em um domínio de aplicativo de teste especial. No entanto, ao usar domínios de aplicativo não padrão, cenários nos quais chamadas de código nativo para código gerenciado (por exemplo, funções de retorno de chamada nativas consumidas pelo código gerenciado) podem causar erros com a mensagem: "Não é possível passar um GCHandle entre AppDomains". Para esses cenários, force a execução de testes gerenciados no domínio de aplicativo padrão usando o switch /defaultAppDomain.
A execução de testes gerenciados no domínio de aplicativo padrão é incompatível com Arquivos de configuração de assembly.
Suporte para métodos de teste assíncronos
Os binários NetFX 4.5 do TAEF dão suporte à execução de métodos de teste TAEF assíncronos. Isso significa que os testes TAEF marcados com a palavra-chave async podem aguardar operações assíncronas.
Observação Não tente aproveitar essa funcionalidade com os binários NetFX 2.0/3.5 do TAEF. Somente os binários NetFX 4.5 oferecem suporte a esse recurso.
O TAEF oferece suporte aos métodos de teste void e async Task (ambos resultarão na mesma funcionalidade):
[TestMethod]
public async Task MyAsyncTest()
{
await AsyncAPICall1();
var result = await AsyncAPICall2();
Verify.IsTrue(result);
}
Como alternativa:
[TestMethod]
public async void MyAsyncTest2()
{
await AsyncAPICall1();
var result = await AsyncAPICall2();
Verify.IsTrue(result);
}