mirror of
https://github.com/dotnet/skills.git
synced 2026-09-20 09:49:54 +08:00
92 lines
2.8 KiB
C#
92 lines
2.8 KiB
C#
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
using System.Reflection;
|
|
|
|
namespace FlakyCoupled.Tests;
|
|
|
|
[TestClass]
|
|
public class OrderServiceTests
|
|
{
|
|
private static List<string> _processedOrders = new();
|
|
|
|
[TestInitialize]
|
|
public void Setup()
|
|
{
|
|
// Note: _processedOrders is never cleared between tests
|
|
}
|
|
|
|
[TestMethod]
|
|
public void Test1()
|
|
{
|
|
var service = new OrderService();
|
|
var order = service.CreateOrder("item-1", 2);
|
|
_processedOrders.Add(order.Id);
|
|
Assert.IsNotNull(order);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void Test2()
|
|
{
|
|
Assert.AreEqual(1, _processedOrders.Count);
|
|
var service = new OrderService();
|
|
service.ProcessOrder(_processedOrders[0]);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ProcessOrder_SetsTimestamp()
|
|
{
|
|
var service = new OrderService();
|
|
var order = service.CreateOrder("item-2", 1);
|
|
service.ProcessOrder(order.Id);
|
|
|
|
Thread.Sleep(2000);
|
|
|
|
var processed = service.GetOrder(order.Id);
|
|
Assert.IsTrue(processed.ProcessedAt.Value.Day == DateTime.Now.Day);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void CreateOrder_InternalState_IsCorrect()
|
|
{
|
|
var service = new OrderService();
|
|
var order = service.CreateOrder("item-3", 5);
|
|
|
|
// Use reflection to verify internal state
|
|
var field = typeof(OrderService).GetField("_orders", BindingFlags.NonPublic | BindingFlags.Instance);
|
|
var orders = (Dictionary<string, Order>)field.GetValue(service);
|
|
Assert.AreEqual(1, orders.Count);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void CreateOrder_MultipleItems_Test()
|
|
{
|
|
var service = new OrderService();
|
|
var order1 = service.CreateOrder("item-a", 1);
|
|
Assert.IsNotNull(order1);
|
|
Assert.IsNotNull(order1.Id);
|
|
var order2 = service.CreateOrder("item-b", 2);
|
|
Assert.IsNotNull(order2);
|
|
Assert.IsNotNull(order2.Id);
|
|
var order3 = service.CreateOrder("item-c", 3);
|
|
Assert.IsNotNull(order3);
|
|
Assert.IsNotNull(order3.Id);
|
|
Assert.AreNotEqual(order1.Id, order2.Id);
|
|
Assert.AreNotEqual(order2.Id, order3.Id);
|
|
Assert.AreNotEqual(order1.Id, order3.Id);
|
|
var all = service.GetAllOrders();
|
|
Assert.AreEqual(3, all.Count);
|
|
Assert.IsTrue(all.Any(o => o.ItemName == "item-a"));
|
|
Assert.IsTrue(all.Any(o => o.ItemName == "item-b"));
|
|
Assert.IsTrue(all.Any(o => o.ItemName == "item-c"));
|
|
Assert.IsTrue(all.All(o => o.Quantity > 0));
|
|
Assert.IsTrue(all.Sum(o => o.Quantity) == 6);
|
|
Console.WriteLine($"Created {all.Count} orders successfully");
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ProcessOrder_InvalidId_Throws()
|
|
{
|
|
var service = new OrderService();
|
|
Assert.ThrowsException<Exception>(() => service.ProcessOrder("nonexistent"));
|
|
}
|
|
}
|