Posso repetir um teste de unidade repetidamente ao longo de uma coleção no Visual Studio 2008?

votos
0

Eu tenho um teste de unidade onde eu executar um método para cada item em uma coleção (usando um foreach). Atualmente tenho uma declaração no final do foreach para testar se o método retornou o valor correto. Isso funciona, mas o resultado é o teste falha quando o método falhar pela primeira vez. Nenhum item subsiquent na coleção são testados.

Eu gostaria de executar essencialmente um teste de pleno direito para cada item na coleção. O teste é executado para cada item, mesmo se um falhar. E os shows janela resultados dos testes resultar de dados para cada passagem.

Eu sei que eu posso usar uma fonte de dados para executar um teste para cada linha em um banco de dados, mas isso não é conveniente neste caso. Existe outra maneira?

Meu teste atual se parece com:

public void TestXHTMLBlock()
        {
            foreach (XmlNode current in Test_Cases.SelectNodes(Test_Cases/Test_Case))
            {
                XHTMLBlock x = new XHTMLBlock(current.SelectSingleNode(Input).CreateNavigator(), );
                XmlDocument temp = new XmlDocument();
                temp.LoadXml(<Output> + x.sWordML(false) + </Output>);


                XmlDiff diff = new XmlDiff(XmlDiffOptions.IgnoreComments |
                                     XmlDiffOptions.IgnoreDtd |
                                     XmlDiffOptions.IgnoreNamespaces |
                                     XmlDiffOptions.IgnorePI |
                                     XmlDiffOptions.IgnorePrefixes |
                                     XmlDiffOptions.IgnoreWhitespace |
                                     XmlDiffOptions.IgnoreXmlDecl);

                StringBuilder str = new StringBuilder();
                XmlWriter xwrite = XmlWriter.Create(str);

                bool ret = diff.Compare(current.SelectSingleNode(Output), temp.SelectSingleNode(Output), xwrite);
                xwrite.Close();

                Assert.IsTrue(ret, current.SelectSingleNode(Description).InnerText);
            }
        }

Eu sei que isso parece um excelente candidato para uma fonte de dados XML, mas eu não posso chegar a esse trabalho. A tag de entrada contém XML que a fonte de dados tenta analisar. Isso significa que eu não possa acessá-lo corretamente no meu teste e o analisador de fonte de dados engasga com um pouco da minha entrada XML. Se eu fosse capaz de dizer o analisador XML fonte de dados para tratar o XML interna como texto, que iria funcionar tão bem ...

Publicado 26/08/2009 em 22:41
fonte usuário
Em outras línguas...                            


3 respostas

votos
1

Você pode colocar o resultado de teste de um item individual em uma coleção e fazer valer após foreach se essa coleção contém nada. Abaixo está trecho de código de exemplo para ilustrar a idéia.

List<Item> errors = new List<Item>();
foreach(Item item in items)
{
   if( string.IsNullOrEmpty(item.Name))
   {
     errors.Add(item);
   }
} 
Assert.IsTrue(errors.Count == 0,"There are items with no name"); 

Se você quiser ver mais detalhes quando o teste falhar, você pode escrever um método utilitário que percorre coleção de erros e gera uma mensagem detalhada, que você pode usar em seu assert.

Respondeu 26/08/2009 em 22:53
fonte usuário

votos
0

Eu consideraria usando um StringBuilder e anexando uma string em cada erro.

No final você pode verificar se o StringBuilder está vazio e, em seguida, escrevê-lo para consolar / debug / trace, qualquer que seja a sua estrutura de teste de unidade é automaticamente coleta e deixe o teste falhar via Assert.Fail () ou similar

Respondeu 26/08/2009 em 22:57
fonte usuário

votos
0

Se você estiver usando nUnit 2.5.x, o ValueSourceAttributepode ser o que você está procurando. Isso vai repetir todo o teste uma vez para cada membro da indicada IEnumerable.

Respondeu 26/08/2009 em 22:56
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more