Coder Social home page Coder Social logo

farm-classes's Introduction

Boas-vindas ao repositório do exercício Farm Classes!

Abaixo estão os desafios que cumpri.

Requisitos

Parabéns, você recebeu de herança uma fazenda! 🚜🐄🐖

Entretanto, você não tem controle sobre os animais da fazenda, e depois de um mês tentando administrar tudo, percebe que está uma absoluta desordem!

Com isso, você decide usar seus conhecimentos em C# para organizar os diferentes tipos de animal em classes, para que assim consiga se organizar melhor.

1 - Crie uma classe Cow

Primeiramente, vamos ao gado!

A classe Cow deve possuir uma propriedade pública Id do tipo Guid com o valor padrão de Guid.NewGuid();

Todos os animais da propriedade deverão possuir identificadores únicos. Por esse motivo vamos usar o tipo Guid para declarar a propriedade que conterá esses Ids.

Se quiser saber mais sobre a estrutura Guid, nativa do C#, consulte a documentação.

A classe Cow deve possuir uma propriedade pública Weight do tipo int

Você também precisa saber o peso de cada uma das vacas, então atribua um peso com int.

A classe Cow deve possuir uma propriedade pública Breed do tipo string

Você também precisa saber qual a raça de cada uma das vacas para depois poder organizar o pasto. Atribua o nome da raça em uma string.

A classe Cow deve possuir um construtor público que receba todos os valores das propriedades como parâmetros, exceto o Id

Os valores dos parâmetros devem ter a mesma ordem das propriedades elencadas nesse requisito.

O construtor da classe Cow deve validar e atribuir os valores das propriedades

A atribuição deve ocorrer no corpo do construtor para que ocorra no momento da inicialização dos objetos.

Caso seja passado um Weight menor ou igual a zero ou uma Breed que seja uma string nula ou vazia, o construtor deve lançar uma ArgumentException.


Pronto, os bovinos já estão devidamente organizados. 🐮

2 - Crie uma classe Pig

Agora é a vez dos porcos!

A classe Pig deve possuir uma propriedade pública Id do tipo Guid com o valor padrão de Guid.NewGuid();

Assim como com as vacas, deve ser possível atribuir um Id único para cada porco.

Se quiser saber mais sobre a estrutura Guid, nativa do C#, consulte a documentação.

A classe Pig deve possuir uma propriedade pública Age do tipo int

Temos muitos porcos jovens e idosos na fazenda. Atribuindo uma idade podemos organizá-los melhor.

A classe Pig deve possuir um construtor público que receba a idade do porco como parâmetro

A idade deve ser atribuída ao parâmetro correto.

O construtor da classe Pig deve validar e atribuir os valores das propriedades

A atribuição deve ocorrer no corpo do construtor para que ocorra no momento da inicialização dos objetos.

Caso seja passado um Age menor que zero, o construtor deve lançar uma ArgumentException.


Agora já organizamos os bovinos e suínos. 🐮🐷

3 - Crie uma classe Chicken

Agora é a vez das galinhas!

A classe Chicken deve possuir uma propriedade pública Id do tipo Guid com o valor padrão de Guid.NewGuid();

Assim como com as vacas e porcos, deve ser possível atribuir um Id único para cada galinha.

Se quiser saber mais sobre a estrutura Guid, nativa do C#, consulte a documentação.

A classe Chicken deve possuir uma propriedade pública EggsPerWeek do tipo int

Precisamos saber quais galinhas são mais produtivas e quantas podem estar com algum problema de saúde. Uma boa métrica para isso é a quantidade de ovos por semana.

A classe Chicken deve possuir uma propriedade pública Mother do tipo Chicken?

Você achou que seria uma boa ideia traçar a genealogia materna das galinhas. Por isso, cada galinha poderá ter uma mãe atribuída, caso a mãe também seja parte da sua granja.

Caso contrário, o valor da mãe pode permanecer como null. Inclusive é por isso que usamos a interrogação após o tipo Chicken: ela permite atribuir o valor null a tipos de referência que normalmente não poderiam ser nulos.

A classe Chicken deve possuir um construtor público que receba todos os valores das propriedades como parâmetros, exceto o Id

Os valores dos parâmetros devem ter a mesma ordem das propriedades elencadas nesse requisito. Além disso, o parâmetro mother não precisa ser anulável, podendo ter o tipo Chicken sem a interrogação.

A classe Chicken deve possuir, em paralelo, outro construtor público que receba o EggsPerWeek como parâmetro, mas que não receba nem o Mother nem o Id

Nesse caso, não será necessário atribuir um valor à propriedade Mother, que deverá permanecer nula.

Ambos os construtores da classe Chicken devem validar e atribuir os valores da propriedade EggsPerWeek

A atribuição deve ocorrer no corpo do construtor para que ocorra no momento da inicialização dos objetos.

Caso seja passado um EggsPerWeek menor que zero, o construtor deve lançar uma ArgumentException.


Parabéns, você separou classes para todos os animais da fazenda. 🐮🐷🐔

Mas o trabalho ainda não acabou!

4 - Crie testes unitários pra todas as classes de animais

Agora precisamos ter certeza de que tudo ocorreu bem, então vamos aos Testes usando xUnit e FluentAssertions!

Os testes devem ser criados na pasta farm-classes.Test, nos arquivos já criado para esse fim

Os arquivos dos testes são ChickenTest.cs, CowTest.cs e PigTest.cs.

O CowTest deve testar se a classe Cow possui um construtor válido que atribui corretamente as propriedades Weight e Breed

O teste deve verificar:

  • se o valor das propriedades é igual ao passado no construtor,
  • se é lançada uma ArgumentException quando a classe recebe um Weight menor ou igual a zero
  • se é lançada uma ArgumentException quando a classe recebe uma Breed nula ou vazia
O PigTest deve testar se a classe Pig possui um construtor válido que atribui corretamente a propriedade Age

O teste deve verificar:

  • se o valor da Age é igual ao passado no construtor,
  • se é lançada uma ArgumentException quando a classe recebe uma Age negativa
O ChickenTest deve testar se a classe Chicken possui um construtor válido que atribui corretamente as propriedades EggsPerWeek e, quando for o caso, Mother

O teste deve verificar:

  • se o valor das propriedades é igual ao passado no construtor,
  • se é possível instanciar a classe com e sem uma Mother
  • se é lançada uma ArgumentException quando a classe recebe um EggsPerWeek negativo

Agora sim, pode respirar fundo! Sua fazenda está muito mais gerenciável e as coisas estão começando a se encaixar!

farm-classes's People

Contributors

abnerfds avatar rahelmartim avatar trybe-tech-ops avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.