Supprimer 'Qwirkle/cm4.cs'
continuous-integration/drone/push Build is passing Details

test_old_branch
Jérémy Mouyon 11 months ago
parent bd9aad6ccb
commit 95039ecb30

@ -1,162 +0,0 @@
// Pas de console.WriteLine() dans les classes
// Mot clé abstract dans la déclaration de la méthode et la déclaration de la classe pour faire une méthode virtuelle pure et une classe abstraite
// => ON utilise pas normalement
using panier;
namespace Animaux // Héritage
{
public class Animal
{
public string Name {get; private set;}
public Animal(string name)
{
this.Name = name;
}
public virtual string Crie()
{
return "GRR";
}
}
public class Chien : Animal
{
public Chien(string name) : base(name) {}
public override string Crie()
{
return $"{base.Crie()} + Wouf";
}
}
}
namespace panier // Interfaces
{
public class Article : IEqualTable<Article>
{
public string Name { get; set; }
public float Price { get; set; }
public Article(string name, float price)
{
Name = name;
Price = price;
}
public override bool Equals(object? obj)
{
if(ReferenceEquals(obj, null)) return false;
if(ReferenceEquals(obj, this)) return true;
if(obj.GetType() != typeof(Article)) return false;
return Equals(obj as Article);
}
public bool Equals(Article? other)
{
return other.Name.Equals(Name);
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
public class PanierDAchat
{
/*
1) Créer une collection privée readonly
2) Créer une ReadOnlyCollection public avec un set privé
3) On l'initialise dans le constructeur
*/
public ReadOnlyCollection<Article> Articles { get; private set; };
private List<Article> Articles = new List<Article>();
public ICalculPromo Promo {get; private set; }
public float TotalPrice()
{
return Promo.GetTotal(this);
}
public void AddArticle(Article article)
{
if(!Articles.Contains(article))
{
Articles.Add(article);
}
}
}
public interface ICalculPromo
{
float GetTotal(PanierDAchat panier);
}
public class SansPromotion : ICalculPromo
{
public float GetTotal(PanierDAchat panier)
{
return panier.Articles.Sum(a => a.Price);
}
}
public class SansTVA : ICalculPromo
{
public float GetTotal(PanierDAchat panier)
{
return panier.Articles.Sum(a => a.Price) * 0.8f;
}
}
public class TroisPourLePrixDeDeux : ICalculPromo
{
public float GetTotal(PanierDAchat panier)
{
var sortedArticles = panier.Articles.OrderByDescending(a => a.Price);
int count = sortedArticles.count();
sortedArticles.take((int)(count / 3) * 3).Sum(a => a.Price);
}
}
}
PanierDAchat p = new PanierDAchat();
p.Promo = new SansPromotion();
p.Promo = new SansTVA();
namespace TestUnitairePanier
{
public class UnitTest1
{
[Fact]
public void Test_AddArticle()
{
PanierDAchat p = new PanierDAchat();
bool result = p.AddArticle(new Article("Jp", 0.4))
Assert.True(result);
}
}
public class UnitTest2
{
[Theory]
[InlineData(true, "Jp", 0.5)]
[InlineData(false, "Jp", -0.5)]
public void Test_AddArticle(bool expectedResult, string name, float price)
{
PanierDAchat p = new PanierDAchat();
bool result = p.AddArticle(new Article("Jp", 0.4))
Assert.True(result);
}
}
}
Loading…
Cancel
Save