Я новичок в модульном тестировании и, следуя такому количеству статей, я могу написать ниже модульный тест, но он не работает, так как нет никакой связи между основным классом и классом фабрики. Как решить эту проблему? Можно ли написать модульный тест, не меняя структуру моего класса.
Мой класс:
public class SomeClass : ISomeClass
{
public ServiceClientManager<IScan> scan;
public SomeClass(Action<String> logMessages)
{
this.logMessage = logMessages;
}
public void Process(string a, string b, string c)
{
if (this.Scan == null)
{
ConnectToScan();
}
if (status)
{
Scan.Proxy.MethodScan(a, b, c);
}
}
}
public bool ConnectToScan()
{
this.Scan = null;
NetTcpBinding netTcpBinding = new NetTcpBinding();
netTcpBinding.MaxBufferSize = int.MaxValue;
netTcpBinding.MaxReceivedMessageSize = int.MaxValue;
netTcpBinding.ReaderQuotas.MaxArrayLength = int.MaxValue;
netTcpBinding.ReaderQuotas.MaxBytesPerRead = int.MaxValue;
netTcpBinding.ReaderQuotas.MaxDepth = int.MaxValue;
netTcpBinding.ReaderQuotas.MaxNameTableCharCount = int.MaxValue;
netTcpBinding.ReaderQuotas.MaxStringContentLength = int.MaxValue;
netTcpBinding.ReceiveTimeout = TimeSpan.FromMinutes(5);
netTcpBinding.CloseTimeout = TimeSpan.FromMinutes(5);
netTcpBinding.OpenTimeout = TimeSpan.FromMinutes(5);
netTcpBinding.SendTimeout = TimeSpan.FromMinutes(5);
barcodeScanner = new ServiceClientManager<IScan>(netTcpBinding, new EndpointAddress("net.tcp://localhost/XXXX"));
return true;
}
Здесь ConnectToScan () установит sh соединение со службой, и я Я использую его внутри метода Process для передачи параметров этому сервису. Чтобы написать модульный тест для этого метода, я пытаюсь смоделировать службу «IScan» и утверждаю, что метод службы вызывается как минимум один раз.
Мой модульный тест:
private Action<string> _logMessage = msg => Console.WriteLine(msg);
[Fact]
public void MethodTest()
{
var factoryScanMoq = new Mock<IScan>();
factoryScanMoq.Setup(x => x.MethodScan("test", "S000", "test2"))
.Returns(null);
var mockService = new ServiceClientManager<IScan>(factoryBarcodeScanMoq.Object);
classObj.process("test", "S000", "test2"); // FactoryScanMoq is not passed here
classObj.Scan = mockService;
factoryScanMoq.Verify(x => x.MethodScan("test", "S000", "test2"), Times.Once);
}
I Я знаю, что нет никакой связи между фабрикой Mock и SomeClass, но я не уверен, как создать отношение, поскольку я не могу передать FactoryMoq в SomeClass в качестве аргумента конструктора.
Заранее спасибо