add some test and documentation of the code

pull/50/head
Antoine PEREDERII 2 years ago
parent 947597cdc8
commit 0c77166f85

@ -53,7 +53,6 @@
<None Remove="Stub\" />
<None Remove="DataContractPersistance\" />
<None Remove="Views\Category\" />
<None Remove="Test\" />
<None Remove="Resources\Images\Sources\accounts.svg" />
<None Remove="Resources\Images\Sources\back_arrow_icon.svg" />
<None Remove="Resources\Images\Sources\dotnet_bot.svg" />
@ -73,7 +72,6 @@
<Folder Include="Stub\" />
<Folder Include="DataContractPersistance\" />
<Folder Include="Views\Category\" />
<Folder Include="Test\" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\Images\ImagesDictionary.xaml" />

@ -1,14 +0,0 @@
using System;
using Model;
namespace Banquale.Test
{
public class AccountTest
{
public AccountTest()
{
Account account = new Account(2000000, "Men", "How are you ?");
}
}
}

@ -37,14 +37,14 @@ public partial class BalancePage : ContentPage
return;
}
Transactions transactions = Mgr.SelectedAccount.TransactionsList.FirstOrDefault(u => u.Id == TransactionId);
if (transactions == null)
Transaction transaction = Mgr.SelectedAccount.TransactionsList.FirstOrDefault(u => u.Id == TransactionId);
if (transaction == null)
{
await DisplayAlert("Erreur", "La transaction n'éxiste pas !", "OK");
return;
}
Mgr.SelectedTransaction = transactions;
Mgr.SelectedTransaction = transaction;
await Navigation.PushModalAsync(new TransactionsPage());

@ -1,26 +1,42 @@
using System;
/// \file
/// \brief Définition de la classe Account.
/// \author Votre nom
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Runtime.Serialization;
using System;
using System.Threading.Tasks;
namespace Model
{
/// <summary>
/// Représente un compte bancaire.
/// </summary>
[DataContract]
public class Account : INotifyPropertyChanged, IEquatable<Account>
{
public event PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// Événement déclenché lorsqu'une propriété est modifiée.
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// Déclenche l'événement PropertyChanged pour une propriété donnée.
/// </summary>
/// <param name="propertyName">Nom de la propriété modifiée.</param>
void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
/// <summary>
/// Obtient ou définit le solde du compte.
/// </summary>
[DataMember]
public Double Balance
public Double Balance
{
get => balance;
set
@ -34,9 +50,11 @@ namespace Model
[DataMember]
private Double balance;
/// <summary>
/// Obtient ou définit le nom du titulaire du compte.
/// </summary>
[DataMember]
public string Name
public string Name
{
get => name;
set
@ -50,9 +68,11 @@ namespace Model
[DataMember]
private string name;
/// <summary>
/// Obtient ou définit le numéro IBAN du compte.
/// </summary>
[DataMember]
public string IBAN
public string IBAN
{
get => iban;
set
@ -66,6 +86,9 @@ namespace Model
[DataMember]
private string iban;
/// <summary>
/// Obtient une version masquée du numéro IBAN du compte.
/// </summary>
[DataMember]
public string IBANHide
{
@ -81,26 +104,41 @@ namespace Model
[DataMember]
private string ibanHide;
/// <summary>
/// Obtient ou définit la liste des transactions effectuées sur le compte.
/// </summary>
[DataMember]
public List<Transactions> TransactionsList { get; set; } = new List<Transactions>();
public List<Transaction> TransactionsList { get; set; } = new List<Transaction>();
/// <summary>
/// Effectue une transaction entre le compte courant et un compte tiers.
/// </summary>
/// <param name="involvedAccount">Compte tiers impliqué dans la transaction.</param>
/// <param name="sum">Somme de la transaction.</param>
/// <param name="type">Type de transaction (débit ou crédit).</param>
/// <param name="nb">Numéro de la transaction.</param>
public void DoTransactions(Account involvedAccount, Double sum, bool type, int nb)
{
if (type) // si le type est True => c'est un débit, on doit donc ajouter la transaction pour l'autre compte
{
Transactions transaction = new Transactions(type, sum, involvedAccount, nb, DateTime.Now);
Transaction transaction = new Transaction(type, sum, involvedAccount, nb, DateTime.Now);
TransactionsList.Add(transaction);
Balance = Balance-sum;
involvedAccount.DoTransactions(this, sum, !type, nb+1);
Balance = Balance - sum;
involvedAccount.DoTransactions(this, sum, !type, nb + 1);
}
else // Sinon, c'est un crédit, on a juste à l'ajouter ànotre liste de transactions
else // Sinon, c'est un crédit, on a juste à l'ajouter à notre liste de transactions
{
TransactionsList.Add(new Transactions(type, sum, involvedAccount, nb, DateTime.Now));
Balance = Balance+sum;
TransactionsList.Add(new Transaction(type, sum, involvedAccount, nb, DateTime.Now));
Balance = Balance + sum;
}
}
/// <summary>
/// Constructeur de la classe Account.
/// </summary>
/// <param name="balance">Solde initial du compte.</param>
/// <param name="name">Nom du titulaire du compte.</param>
/// <param name="iban">Numéro IBAN du compte.</param>
public Account(Double balance, string name, string iban)
{
Balance = balance;
@ -109,44 +147,29 @@ namespace Model
IBANHide = IBANToString();
}
//public static void DoTransactions(string name, string iban, string sum)
//{
// Debug.WriteLine(name);
// Debug.WriteLine(iban);
// Debug.WriteLine(sum);
// Debug.WriteLine("Transaction successed !");
//public bool DoRequest(string name, string IBAN, float sum)
//{
// List<Transactions> transactions.add(sum);
// if ()
// return true;
//}
//public void AskForHelp(string type, string type2, string message)
//{
// Console.WriteLine("Help button pressed !");
//}
/// <summary>
/// Demande d'aide pour un compte.
/// </summary>
/// <param name="subject">Sujet de la demande d'aide.</param>
/// <param name="description">Description de la demande d'aide.</param>
/// <returns>Un message d'aide.</returns>
public static Message AskForHelp(string subject, string description)
{
Debug.WriteLine(subject);
Debug.WriteLine(description);
Debug.WriteLine("Help button pressed !");
//throw new NotImplementedException();
Message message = new Message(subject, description);
return message;
}
public static void DoRequest(string name, string iBAN, string sum)
{
throw new NotImplementedException();
}
/// <summary>
/// Convertit le numéro IBAN en une version masquée.
/// </summary>
/// <returns>Le numéro IBAN masqué.</returns>
public string IBANToString()
{
char[] res = IBAN.ToCharArray();
for (int i = 5; i< IBAN.Length - 4; i++ )
for (int i = 5; i < IBAN.Length - 4; i++)
{
if (res[i] == ' ')
continue;
@ -155,12 +178,21 @@ namespace Model
return new string(res);
}
/// <summary>
/// Vérifie si deux comptes sont égaux en comparant leur numéro IBAN.
/// </summary>
/// <param name="other">Compte à comparer.</param>
/// <returns>True si les comptes sont égaux, False sinon.</returns>
public bool Equals(Account other)
{
if(other == null) return false;
if (other == null) return false;
else return other.IBAN.Equals(IBAN);
}
/// <summary>
/// Obtient le code de hachage du compte basé sur le numéro IBAN.
/// </summary>
/// <returns>Le code de hachage.</returns>
public override int GetHashCode()
{
return IBAN.GetHashCode();

@ -1,12 +0,0 @@
using System;
namespace Model
{
public class Category
{
public Category()
{
}
}
}

@ -1,17 +1,32 @@
using System;
/// \file
/// \brief Définition de la classe Consultant.
/// \author Votre nom
using System;
using System.Runtime.Serialization;
namespace Model
{
/// <summary>
/// Représente un consultant.
/// </summary>
[DataContract]
public class Consultant : Person
{
{
/// <summary>
/// Liste des messages du consultant.
/// </summary>
[DataMember]
public List<Message> MessagesList = new List<Message>();
/// <summary>
/// Constructeur de la classe Consultant.
/// </summary>
/// <param name="name">Nom du consultant.</param>
/// <param name="firstName">Prénom du consultant.</param>
/// <param name="password">Mot de passe du consultant.</param>
public Consultant(string name, string firstName, string password) : base(name, firstName, password)
{
}
}
}
}
}

@ -1,28 +1,34 @@
using System;
/// \file
/// \brief Définition de la classe Customer.
/// \author Votre nom
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System;
using System.Threading.Tasks;
namespace Model
{
/// <summary>
/// Représente un client.
/// </summary>
[DataContract]
public class Customer : Person
{
/// <summary>
/// Liste des comptes du client.
/// </summary>
[DataMember]
public List<Account> AccountsList { get; private set; } = new List<Account>();
//private uint NbAccounts { get; set; } = AccountsList.Count;
/// <summary>
/// Constructeur de la classe Customer.
/// </summary>
/// <param name="name">Nom du client.</param>
/// <param name="firstName">Prénom du client.</param>
/// <param name="password">Mot de passe du client.</param>
public Customer(string name, string firstName, string password) : base(name, firstName, password)
{}
{ }
}
}

@ -1,15 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
/// \file
/// \brief Définition de l'interface IPersistenceManager.
/// \author Votre nom
using System;
using System.Threading.Tasks;
using System.Collections.Generic;
namespace Model
{
/// <summary>
/// Interface pour la gestion de la persistance des données.
/// </summary>
public interface IPersistenceManager
{
public (List<Customer>, Consultant) DataLoad();
/// <summary>
/// Charge les données depuis une source de persistance.
/// </summary>
/// <returns>Un tuple contenant la liste des clients et le consultant.</returns>
(List<Customer>, Consultant) DataLoad();
/// <summary>
/// Enregistre les données dans une source de persistance.
/// </summary>
/// <param name="cu">La liste des clients à enregistrer.</param>
/// <param name="co">Le consultant à enregistrer.</param>
void DataSave(List<Customer> cu, Consultant co);
}
}

@ -1,55 +1,81 @@
using System;
/// \file
/// \brief Définition de la classe Manager.
/// \author Votre nom
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Runtime.Serialization;
namespace Model
{
[DataContract]
/// <summary>
/// Classe représentant le gestionnaire du système.
/// </summary>
[DataContract]
public class Manager : INotifyPropertyChanged
{
{
public event PropertyChangedEventHandler PropertyChanged;
void OnPropertyChanged([CallerMemberName] string propertyName = null)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
/// <summary>
/// Liste des clients gérés par le gestionnaire.
/// </summary>
[DataMember]
public List<Customer> CustomersList { get; private set; } // devient un set
public List<Customer> CustomersList { get; private set; } // devient un set
/// <summary>
/// Consultant assigné au gestionnaire.
/// </summary>
[DataMember]
public Consultant Consultant { get; private set; } // 1 SEUL consultant
public bool IsConsultant { get; set; } = false;
/// <summary>
/// Indique si le gestionnaire est un consultant.
/// </summary>
public bool IsConsultant { get; set; } = false;
/// <summary>
/// Client sélectionné par le gestionnaire.
/// </summary>
public Customer SelectedCustomer
{
get => selectedCustomer;
set
{
if (selectedCustomer == value)
return;
selectedCustomer = value;
OnPropertyChanged();
}
}
private Customer selectedCustomer;
public Account SelectedAccount
{
get => selectedAccount;
set
{
{
get => selectedCustomer;
set
{
if (selectedCustomer == value)
return;
selectedCustomer = value;
OnPropertyChanged();
}
}
private Customer selectedCustomer;
/// <summary>
/// Compte sélectionné par le gestionnaire.
/// </summary>
public Account SelectedAccount
{
get => selectedAccount;
set
{
if (selectedAccount == value)
return;
selectedAccount = value;
OnPropertyChanged();
}
}
}
private Account selectedAccount;
private Account selectedAccount;
public Transactions SelectedTransaction
/// <summary>
/// Transaction sélectionnée par le gestionnaire.
/// </summary>
public Transaction SelectedTransaction
{
get => selectedTransaction;
set
@ -61,52 +87,70 @@ namespace Model
}
}
private Transactions selectedTransaction;
private Transaction selectedTransaction;
/// <summary>
/// Gestionnaire de persistance utilisé par le gestionnaire.
/// </summary>
public IPersistenceManager Persistence { get; set; }
public Manager(IPersistenceManager persistence)
{
/// <summary>
/// Constructeur du gestionnaire avec un gestionnaire de persistance spécifié.
/// </summary>
/// <param name="persistence">Gestionnaire de persistance.</param>
public Manager(IPersistenceManager persistence)
{
CustomersList = new List<Customer>();
Persistence = persistence;
}
Persistence = persistence;
}
/// <summary>
/// Constructeur du gestionnaire sans gestionnaire de persistance.
/// </summary>
public Manager()
{
CustomersList = new List<Customer>();
}
public bool AddCustomer(Customer MyCustomer)
{
CustomersList.Add(MyCustomer);
return true;
}
/// <summary>
/// Ajoute un client à la liste des clients gérés par le gestionnaire.
/// </summary>
/// <param name="myCustomer">Client à ajouter.</param>
/// <returns>True si l'ajout est réussi, sinon False.</returns>
public bool AddCustomer(Customer myCustomer)
{
CustomersList.Add(myCustomer);
return true;
}
public Customer GetCustomer(int place) {
return CustomersList[place];
}
/// <summary>
/// Récupère le client à la position spécifiée dans la liste des clients.
/// </summary>
/// <param name="place">Position du client.</param>
/// <returns>Le client à la position spécifiée.</returns>
public Customer GetCustomer(int place)
{
return CustomersList[place];
}
/// <summary>
/// Enregistre les données dans la source de persistance.
/// </summary>
public void DataSave()
{
Persistence.DataSave(CustomersList, Consultant);
}
/// <summary>
/// Charge les données depuis la source de persistance.
/// </summary>
public void DataLoad()
{
var data = Persistence.DataLoad();
CustomersList.AddRange(data.Item1);
/*foreach (var j in data.Item1)
{
CustomersList.Add(j);
}*/
{
var data = Persistence.DataLoad();
Consultant = data.Item2;
}
CustomersList.AddRange(data.Item1);
Consultant = data.Item2;
}
}
}

@ -1,23 +1,39 @@
using System;
/// \file
/// \brief Définition de la classe Message.
/// \author Votre nom
using System;
using System.Runtime.Serialization;
namespace Model
{
/// <summary>
/// Classe représentant un message.
/// </summary>
[DataContract]
public class Message
{
{
/// <summary>
/// Sujet du message.
/// </summary>
[DataMember]
public string Subject { get; private set; }
/// <summary>
/// Description du message.
/// </summary>
[DataMember]
public string Description { get; private set; }
/// <summary>
/// Constructeur de la classe Message.
/// </summary>
/// <param name="subject">Sujet du message.</param>
/// <param name="description">Description du message.</param>
public Message(string subject, string description)
{
Subject = subject;
Description = description;
}
}
}

@ -6,10 +6,4 @@
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<None Remove="Model\" />
</ItemGroup>
<ItemGroup>
<Folder Include="Model\" />
</ItemGroup>
</Project>

@ -1,27 +1,55 @@
using System;
/// \file
/// \brief Définition de la classe Person.
/// \author Votre nom
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System;
using System.Threading.Tasks;
namespace Model
{
/// <summary>
/// Classe représentant une personne.
/// </summary>
[DataContract]
public class Person
{
/// <summary>
/// Nom de la personne.
/// </summary>
[DataMember]
public string Name { get; private set; }
/// <summary>
/// Prénom de la personne.
/// </summary>
[DataMember]
public string FirstName { get; private set; }
/// <summary>
/// Identifiant de la personne.
/// </summary>
[DataMember]
public uint Id { get; private set; }
/// <summary>
/// Compteur d'identifiants.
/// </summary>
public static uint id { get; set; } = 0;
/// <summary>
/// Mot de passe de la personne.
/// </summary>
[DataMember]
public string Password { get; private set; }
/// <summary>
/// Constructeur de la classe Person.
/// </summary>
/// <param name="name">Nom de la personne.</param>
/// <param name="firstName">Prénom de la personne.</param>
/// <param name="password">Mot de passe de la personne.</param>
public Person(string name, string firstName, string password)
{
Name = name;
@ -31,5 +59,4 @@ namespace Model
id++;
}
}
}

@ -3,35 +3,51 @@ using System.Runtime.Serialization;
namespace Model
{
/// <summary>
/// Represents a transaction.
/// </summary>
[DataContract(IsReference = true)]
public class Transactions : INotifyPropertyChanged
public class Transaction : INotifyPropertyChanged
{
/// <summary>
/// Occurs when a property value changes.
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
/// <summary>
/// Gets the unique identifier of the transaction.
/// </summary>
[DataMember]
public int Id { get; private set; }
/// <summary>
/// Gets or sets the type of the transaction (debit or credit).
/// </summary>
[DataMember]
public bool Type
{
{
get => type;
set
{
if(type == value)
if (type == value)
return;
type = value;
OnPropertyChanged(nameof(Type));
}
}
[DataMember]
private bool type;
/// <summary>
/// Gets or sets the sum of the transaction.
/// </summary>
[DataMember]
public Double Sum
public double Sum
{
get => sum;
set
@ -43,8 +59,11 @@ namespace Model
}
}
[DataMember]
private Double sum;
private double sum;
/// <summary>
/// Gets or sets the account(s) involved in the transaction.
/// </summary>
[DataMember]
public Account InvolvedAccounts
{
@ -60,6 +79,9 @@ namespace Model
[DataMember]
private Account involvedAccounts;
/// <summary>
/// Gets or sets the category of the transaction.
/// </summary>
[DataMember]
public string Category
{
@ -75,8 +97,11 @@ namespace Model
[DataMember]
private string category;
/// <summary>
/// Gets or sets the date of the transaction.
/// </summary>
[DataMember]
public DateTime Date
public DateTime Date
{
get => date;
set
@ -90,17 +115,21 @@ namespace Model
[DataMember]
private DateTime date;
public Transactions(bool type, Double sum, Account involvedAccounts/*, string category*/, int id, DateTime date)
/// <summary>
/// Initializes a new instance of the <see cref="Transaction"/> class.
/// </summary>
/// <param name="type">The type of the transaction (debit or credit).</param>
/// <param name="sum">The sum of the transaction.</param>
/// <param name="involvedAccounts">The account(s) involved in the transaction.</param>
/// <param name="id">The unique identifier of the transaction.</param>
/// <param name="date">The date of the transaction.</param>
public Transaction(bool type, double sum, Account involvedAccounts, int id, DateTime date)
{
Type = type;
Sum = sum;
Id = id;
InvolvedAccounts = involvedAccounts;
//Category = category;
Date = date;
}
public event PropertyChangedEventHandler PropertyChanged;
}
}

@ -0,0 +1,70 @@
/// \file
/// \brief Fichier de test pour la classe Account.
/// \author Votre nom
using Model;
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Runtime.Serialization;
namespace UnitTest
{
/// <summary>
/// Classe de test pour la classe Account.
/// </summary>
class AccountTest
{
/// <summary>
/// Méthode principale du test.
/// </summary>
/// <param name="args">Arguments de ligne de commande.</param>
static void Main(string[] args)
{
// Création de deux comptes
Account account1 = new Account(1000, "John Doe", "FR123456789");
Account account2 = new Account(500, "Jane Smith", "FR987654321");
// Affichage des informations des comptes
Console.WriteLine("Compte 1:");
Console.WriteLine($"Nom: {account1.Name}");
Console.WriteLine($"IBAN: {account1.IBANHide}");
Console.WriteLine($"Solde: {account1.Balance}");
Console.WriteLine("\nCompte 2:");
Console.WriteLine($"Nom: {account2.Name}");
Console.WriteLine($"IBAN: {account2.IBANHide}");
Console.WriteLine($"Solde: {account2.Balance}");
// Effectuer une transaction entre les comptes
double amount = 200;
Console.WriteLine($"\nEffectuer une transaction de {amount} du compte 1 vers le compte 2...");
account1.DoTransactions(account2, amount, true, 1);
// Affichage des informations des comptes après la transaction
Console.WriteLine("\nAprès la transaction:");
Console.WriteLine("Compte 1:");
Console.WriteLine($"Nom: {account1.Name}");
Console.WriteLine($"IBAN: {account1.IBANHide}");
Console.WriteLine($"Solde: {account1.Balance}");
Console.WriteLine("\nCompte 2:");
Console.WriteLine($"Nom: {account2.Name}");
Console.WriteLine($"IBAN: {account2.IBANHide}");
Console.WriteLine($"Solde: {account2.Balance}");
// Demander de l'aide
string helpSubject = "Besoin d'aide";
string helpDescription = "Je rencontre un problème avec mon compte.";
Message helpMessage = Account.AskForHelp(helpSubject, helpDescription);
Console.WriteLine($"\nDemande d'aide envoyée : {helpMessage}");
// Comparaison de deux comptes
Console.WriteLine("\nComparaison des comptes...");
bool areEqual = account1.Equals(account2);
Console.WriteLine($"Les comptes sont-ils égaux ? {areEqual}");
Console.ReadLine();
}
}
}

@ -0,0 +1,11 @@
using System;
namespace UnitTest
{
public class ConsultantTest
{
public ConsultantTest()
{
}
}
}

@ -1,5 +1,5 @@
using System;
namespace Banquale.Test
namespace UnitTest
{
public class CustomerTest
{

@ -1,5 +1,5 @@
using System;
namespace Banquale.Test
namespace UnitTest
{
public class ManagerTest
{

@ -0,0 +1,28 @@
using Model;
using System;
namespace UnitTest
{
/// <summary>
/// Classe de test pour la classe Message.
/// </summary>
public class MessageTest
{
/// <summary>
/// Point d'entrée du programme de test.
/// </summary>
/// <param name="args">Arguments de ligne de commande.</param>
static void Main(string[] args)
{
// Création d'un message
Message message = new Message("Important", "Ceci est un message important.");
// Affichage des informations du message
Console.WriteLine("Message:");
Console.WriteLine($"Sujet: {message.Subject}");
Console.WriteLine($"Description: {message.Description}");
Console.ReadLine();
}
}
}

@ -0,0 +1,11 @@
using System;
namespace UnitTest
{
public class PersonTest
{
public PersonTest()
{
}
}
}

@ -0,0 +1,38 @@
/// \file
/// \brief Fichier de test pour la classe Transaction.
/// \author Votre nom
using Model;
using System;
namespace UnitTest
{
/// <summary>
/// Classe de test pour la classe Transaction.
/// </summary>
class TransactionTest
{
/// <summary>
/// Méthode principale du test.
/// </summary>
/// <param name="args">Arguments de ligne de commande.</param>
static void Main(string[] args)
{
// Création d'un compte
Account account = new Account(1000, "John Doe", "FR123456789");
// Création d'une transaction
Transaction transaction = new Transaction(true, 200, account, 1, DateTime.Now);
// Affichage des informations de la transaction
Console.WriteLine("Transaction:");
Console.WriteLine($"Type: {(transaction.Type ? "Débit" : "Crédit")}");
Console.WriteLine($"Somme: {transaction.Sum}");
Console.WriteLine($"Compte impliqué: {transaction.InvolvedAccounts.Name}");
Console.WriteLine($"Catégorie: {transaction.Category}");
Console.WriteLine($"Date: {transaction.Date}");
Console.ReadLine();
}
}
}

@ -16,10 +16,6 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="3.2.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>

Loading…
Cancel
Save