Começando com ASP.NET 5 – Adicionando novos projetos e testes com xunit

Bom, agora que já entendemos um pouco do ambiente do asp.net 5, configuramos o necessário, etc., vamos começar a desenvolver o nosso projeto efetivamente. Como a missão principal destes posts e do que está sendo desenvolvido é o asp.net 5, não se preocupem muito com a arquitetura. Afinal, se não fosse para entendermos como está o novo ambiente, bastaria criarmos um projeto através do visual studio 2015 que já teríamos mais do que temos agora. Acredito que o mais importante ao começarmos com uma tecnologia nova, ou como no nosso caso, uma nova versão da tecnologia, o mais importante é entender como funciona, quais são as idéias por trás do que estamos estudando, etc. Como o nosso sistema é sobre finanças pessoais, vamos começar pensando em nosso domínio. Para isso, vamos alterar um pouco da estrutura do nosso projeto. Até agora, estávamos utilizando a estrutura default gerada com o yeoman. Ou seja, tínhamos a pasta Finance e todo o código dentro desta pasta. Vamos passar a utilizar as paras src e test, como é o padrão gerado pelo Visual Studio 2015, e dentro da pasta src, adicionar as pastas dos projetos. Não precisamos de nenhuma ferramenta para isso, basta criarmos as pastas na mão. Crie as pastas src e test, e um arquivo chamado global.json:

  • global.json
{
  "projects": [ "src", "test" ],
  "sdk": {
    "version": "1.0.0-rc1-update1"
  }
}

A estrutura de pasta agora deve estar assim:

nova estrutura pasta

Agora vamos criar um novo projeto dentro de src, chamado Finance.Domain. Você pode criar o projeto através do Visual Studio 2015, através do yeoman, ou na mão mesmo. Agora vamos criar a nossa primeira classe: Bill.cs

  • Entities/Bill.cs
using System;

namespace Finance.Domain.Entities
{
    public class Bill 
    {
        public Guid Id { get; set; }
        public string Description { get; set; }
        public decimal Value { get; set; }
        
        public Bill(string description, decimal value) 
        {
            if (value <= 0)
                throw new Exception("Value can't be lower than zero");

            Description = description;
            Value = value;
        }
    }
}

Como criamos uma classe e adicionamos uma regra no construtor, vamos criar um teste para garantirmos a funcionalidade. Para isso, vamos criar uma class library dentro da pasta test. Precisamos adicionar duas referências e um comando para podermos executar os testes. Vamos lá:

  • test/Finance.Test/project.json
  "commands": {
    "test": "xunit.runner.dnx"
  },
  "dependencies": {
    "Finance.Domain": "",
    "xunit": "2.1.0",
    "xunit.runner.dnx": "2.1.0-rc1-build204"
  },
  • test/Finance.Test/Domain/BillTest.cs
using Finance.Domain.Entities;
using System;
using Xunit;

namespace Finance.Test 
{
    public class BillTest 
    {
        [Fact]
        public void ShouldCreateNewBill()
        {
            var bill = new Bill("bill", 123m);
            
            Assert.Equal(bill.Description, "bill");
            Assert.Equal(bill.Value, 123m);
        }
        
        [Fact]
        public void ShouldNotAllowValuesLowerOrEqualToZero() 
        {
            Assert.Throws<Exception>(() => new Bill("zero value", 0m));
            Assert.Throws<Exception>(() => new Bill("zero value", -1m));
        }
    }    
}

Se quisermos rodar os testes agora, basta utilizarmos o comando dnx test se você estiver na pasta do projeto de testes, ou dnx -p test\Finance.Test test se você estiver na raiz do projeto:

dnx test

Agora que temos nosso modelo devidamente testado, vamos criar o nosso controller e as nossas views, com um crud simples. Se você estiver utilizando o visual studio code, você pode criar um novo arquivo normalmente. Mas também podemos criar classes, controllers, views, etc., através do yeoman. Caso você não o esteja usando, pode seguir este post para instalá-lo e utilizá-lo. Caso queira criar um controller através do yeoman, o generator aspnet possui sub geradores para esses arquivos:

  • aspnet:AngularController
  • aspnet:AngularControllerAs
  • aspnet:AngularDirective
  • aspnet:AngularFactory
  • aspnet:AngularModule
  • aspnet:AppSettings
  • aspnet:BowerJson
  • aspnet:Class
  • aspnet:CoffeeScript
  • aspnet:Dockerfile
  • aspnet:gitignore
  • aspnet:Gruntfile
  • aspnet:Gulpfile
  • aspnet:HTMLPage
  • aspnet:Interface
  • aspnet:JavaScript
  • aspnet:JScript
  • aspnet:JSON
  • aspnet:JSONSchema
  • aspnet:JSX
  • aspnet:Middleware
  • aspnet:MvcController
  • aspnet:MvcView
  • aspnet:nuget
  • aspnet:PackageJson
  • aspnet:StartupClass
  • aspnet:StyleSheet
  • aspnet:StyleSheetLess
  • aspnet:StyleSheetScss
  • aspnet:TagHelper
  • aspnet:TextFile
  • aspnet:tfignore
  • aspnet:TypeScript
  • aspnet:TypeScriptConfig
  • aspnet:TypeScriptJSX
  • aspnet:WebApiContoller

Então basta utilizarmos o comando:

yo aspnet:MvcController BillController

Para criarmos um controller. Note que você não precisa ir até a pasta de controllers para rodar o comando. O controller gerado através do yeoman é o seguinte:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNet.Mvc;

// For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860

namespace finance.Controllers
{
    public class BillController : Controller
    {
        // GET: /&lt;controller&gt;/
        public IActionResult Index()
        {
            return View();
        }
    }
}

Porém, ao criarmos o nosso controller, podemos notar que ainda não temos nada para fazer aqui. Por padrão, podemos utilizar a view index para listar as nossas contas, porém, ainda não possuímos nenhum banco de dados, repositórios, etc. No próximo post vamos adicionar o banco, etc.

Por hoje é só 😉

Links, referências, etc:

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