Pergunta

Eu sou novo para TDD e xUnit assim que eu quero testar o meu método que é algo como:

List<T> DeleteElements<T>(this List<T> a, List<T> b);

Existe algum método Assert que eu posso usar? Eu acho que algo como isso seria bom

    List<int> values = new List<int>() { 1, 2, 3 };
    List<int> expected = new List<int>() { 1 };
    List<int> actual = values.DeleteElements(new List<int>() { 2, 3 });

    Assert.Exact(expected, actual);

Existe algo parecido com isso?

Foi útil?

Solução

xUnit.Net reconhece coleções para que você só precisa fazer

Assert.Equal(expected, actual); // Order is important

Você pode ver outras afirmações de recolha disponíveis em CollectionAsserts.cs

Para NUnit métodos de comparação acervo da biblioteca são

CollectionAssert.AreEqual(IEnumerable, IEnumerable) // For sequences, order matters

e

CollectionAssert.AreEquivalent(IEnumerable, IEnumerable) // For sets, order doesn't matter

Mais detalhes aqui: CollectionAssert

MbUnit também tem asserções de coleta semelhantes a NUnit: Assert.Collections.cs

Outras dicas

Na versão atual do xUnit (1.5) você pode simplesmente usar

Assert.Equal (esperado, real);

O método acima fará um elemento em comparação elemento das duas listas. Eu não tenho certeza se isso funciona para qualquer versão anterior.

Com xUnit, se você quiser propriedades cereja escolher de cada elemento para testar você pode usar Assert.Collection.

Assert.Collection(elements, 
  elem1 => Assert.Equal(expect1, elem1.SomeProperty),
  elem2 => { 
     Assert.Equal(expect2, elem2.SomeProperty);
     Assert.True(elem2.TrueProperty);
  });

Isso testa a contagem e garante espera que cada ação é verificada.

Recentemente, eu estava usando xUnit 2.4.0 e pacotes Moq 4.10.1 em meu aplicativo núcleo asp.net 2.2.

No meu caso eu consegui-lo funcionar com duas etapas de processo:

  1. A definição de uma implementação de IEqualityComparer<T>
  2. Passe o exemplo comparador como um terceiro parâmetro do método em Assert.True:

    Assert.True(expected, actual, new MyEqualityComparer());

Mas há uma outra maneira mais agradável para obter o mesmo resultado usando pacote FluentAssertions . Ele permite que você faça o seguinte:

// Assert          
expected.Should().BeEquivalentTo(actual));

Curiosamente que Assert.Equal() sempre falha, mesmo quando eu pedi os elementos de duas listas para obtê-los na mesma ordem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top