単体テストやモックに関する概念が新しくなりました。私の無知を言い訳にしてください。その疑わしい質問や、そのコンセプトを理解するための例を考えてください。私が次のインターフェースを持っているとしましょう。実際の単体テストに模擬概念を適用すると脳の凍結が発生する
public interface IMyService
{
OrderConfirmation ProcessOrder(Order order);
}
OrderクラスとOrderConfirmationクラスは次のように定義されています。
public class Order
{
public int OrderId { get; set; }
public int CustomerId { get; set; }
public List<Product> Products { get; set; }
}
public class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public int Price { get; set; }
}
public class OrderConfirmation
{
public int OrderConfirmationId { get; set; }
public int OrderId { get; set; }
public Shipment ShipmentDetails { get; set; }
}
public class Shipment
{
public int ShipmentId { get; set; }
public DateTime ShipmentDate { get; set; }
public int Cost { get; set; }
}
IMyServiceインターフェイスを実装するクラスの実装は以下のとおりです。ここでの鍵は、コンストラクタを介して注入されるデータプロバイダに依存することです。
public class MyService : IMyService
{
private IDataProvider DataProvider;
public MyService(IDataProvider dataProvider)
{
DataProvider = dataProvider;
}
public OrderConfirmation ProcessOrder(Order request)
{
// bunch of operations here including calling various methods of DataProvider to save/retrieve data from databse.
}
}
IDataProviderインターフェイスには、データベースからデータを格納/取得する一連の操作があります。
public interface IDataProvider
{
List<Product> GetAllProducts();
int CreateOrder(int customerId, List<Product> products);
int CreateOrderConfirmation(int OrderConfirmationId, int orderId);
void UpdateListOfAvailableProducts(List<Product> products);
}
ProcessOrder方法を試験するために、私が何とかIDataProviderインターフェイスのすべてのメソッドを模擬しなければならないようですが、私はMOQ(使用)を嘲笑実装を提供する方法については本当に混乱しています。誰かが私にこれを達成する方法の例を教えてもらえますか?
https://github.com/Moq/moq4/wiki/Quickstart – Nkosi
はIDataProviderインターフェイスが行使されたか、テスト対象のメソッドを表示します。 – Nkosi