Testando suas classes com FluentAssertions

Como as coisas andam corridas ultimamente e não tive tempo para continuar com os estudos/posts sobre o novo asp.net 5, que na verdade agora chama-se ASP.NET Core 1.0 (mas isso é assunto para outro post. Caso queira saber mais, confira este post do Scott Hanselman), resolvi criar um post rápido falando sobre o FluentAssertions. O FluentAssertions é um conjunto de extension methods que, segundo o site oficial diz, permite especificar de maneira mais natural o resultado esperado de um teste no estilo TDD/BDD. Para saber se você pode utilizar ou não o FluentAssertions, segundo o próprio site deles, este pacote possui suporte para as seguintes versões do .net framework:

  • NET 4.0, 4.5 and 4.6
  • CoreClr, .NET Native and Universal Windows Platform
  • Windows Store Apps for Windows 8.1
  • Silverlight 5
  • Windows Phone 8.1
  • Windows Phone Silverlight 8.0 and 8.1
  • Portable Class Libraries

E também trabalha em conjunto com os seguintes frameworks de teste:

  • MSTest (Visual Studio 2010, 2012 Update 2, 2013 and 2015)
  • NUnit
  • XUnit
  • XUnit2
  • MBUnit
  • Gallio
  • NSpec
  • MSpec

Então vamos para um exemplo simples: Vamos criar uma classe e seus respectivos testes utilizando o FluentAssertions. Vamos começar adicionando alguns pacotes através do nuget:

Install-Package NUnitTestAdapter.WithFramework
Install-Package FluentAssertions
Install-Package Newtonsoft.Json

Agora vamos criar uma classe chamada Person:

    public class Person
    {
        [JsonProperty("id")]
        public Guid Id { get; set; }

        [JsonProperty("personName")]
        public string Name { get; set; }

        [JsonProperty("personAge")]
        public int Age { get; set; }

        [JsonIgnore]
        public string Source { get; set; }

        public Person()
        {
            Source = "json api";
        }
    }

Agora imagine que queremos testar algumas coisas, como se a propriedade Age está anotada com JsonProperty e passando o parâmetro PropertyName correto. Vamos criar um teste para isso!

[Test]
public void IdPropertyShouldBeAnnotatedWithJsonProperty()
{
    typeof(Person)
        .GetProperty("Id")
        .Should()
        .BeDecoratedWith<JsonPropertyAttribute>("because Person.Id is mapped to deserialize from json");

    typeof(Person)
        .GetProperty("Id")
        .GetCustomAttributes(typeof(JsonPropertyAttribute), false)
        .First()
        .As<JsonPropertyAttribute>()
        .PropertyName
        .Should()
        .Be("id");
}

Precisa testar algum valor de alguma propriedade? Olha como fica mais legível o teste:

[TestCase("json api")]
public void SourcePropertyShouldBeEqualTo(string value)
{
    var person = new Person();

    person.Source.Should().Be(value);
}

Eu particularmente achei bem bacana o FluentAssertions. Caso você queira dar uma olhada melhor no que ele pode oferecer, você pode dar uma olhada no projeto lá no repositório do github deles: https://github.com/dennisdoomen/fluentassertions

Por hoje é só 😉

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s