namespace UnitTestRefactoring { public class OrderService { private IServiceConnection ServiceConnection; private IServiceReader ServiceReader; private IServiceWriter ServiceWrite; public OrderService(IServiceConnection connection, IServiceReader reader, IServiceWriter writer) { this.ServiceConnection = connection; this.ServiceReader = reader; this.ServiceWrite = writer; } public bool GetOrders(string orderId) { if (string.IsNullOrWhiteSpace(orderId)) return false; return true; } } } |
这个类表示远程Order服务,只有一个方法GetOrders,该方法可以根据OrderId来查询Order信息,为了简单起见,如果返回true说明服务调用成功,如果返回false表示调用失败;其中构造函数包含了三个接口,分别用来表示不同用途的接口抽象;IServiceConnection表示对远程服务链接的抽象,IServiceReader表示对不同服务接口读取的抽象,IServiceWriter表示对不同服务接口写入的抽象;这么做可以最大化的分解耦合;
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using NSubstitute; using UnitTestRefactoring; namespace UnitTestRefactoring.UnitTests { [TestClass] public class OrderService_UnitTests { [TestMethod] public void OrderService_GetOrders_NormalFlows() { IServiceConnection mockServiceConnection = Substitute.For<IServiceConnection>(); IServiceReader mockServiceReader = Substitute.For<IServiceReader>(); IServiceWriter mockServiceWriter = Substitute.For<IServiceWriter>(); OrderService testOrderService = new OrderService(mockServiceConnection, mockServiceReader, mockServiceWriter); bool testResult = testOrderService.GetOrders("10293884"); Assert.AreEqual(true, testResult); } [TestMethod] public void OrderService_GetOrders_OrderIdIsNull() { IServiceConnection mockServiceConnection = Substitute.For<IServiceConnection>(); IServiceReader mockServiceReader = Substitute.For<IServiceReader>(); IServiceWriter mockServiceWriter = Substitute.For<IServiceWriter>(); OrderService testOrderService = new OrderService(mockServiceConnection, mockServiceReader, mockServiceWriter); bool testResult = testOrderService.GetOrders(string.Empty); Assert.AreEqual(false, testResult); } } } using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using NSubstitute; using UnitTestRefactoring; namespace UnitTestRefactoring.UnitTests { [TestClass] public class OrderService_UnitTests { [TestMethod] public void OrderService_GetOrders_NormalFlows() { IServiceConnection mockServiceConnection = Substitute.For<IServiceConnection>(); IServiceReader mockServiceReader = Substitute.For<IServiceReader>(); IServiceWriter mockServiceWriter = Substitute.For<IServiceWriter>(); OrderService testOrderService = new OrderService(mockServiceConnection, mockServiceReader, mockServiceWriter); bool testResult = testOrderService.GetOrders("10293884"); Assert.AreEqual(true, testResult); } [TestMethod] public void OrderService_GetOrders_OrderIdIsNull() { IServiceConnection mockServiceConnection = Substitute.For<IServiceConnection>(); IServiceReader mockServiceReader = Substitute.For<IServiceReader>(); IServiceWriter mockServiceWriter = Substitute.For<IServiceWriter>(); OrderService testOrderService = new OrderService(mockServiceConnection, mockServiceReader, mockServiceWriter); bool testResult = testOrderService.GetOrders(string.Empty); Assert.AreEqual(false, testResult); } } } |