[TestMethod] public void DecomposeWithMultipleSteps() { // Arrange var v = 100; var value0 = DBValue.Create(v); var value1 = DBValue.Create(v * 10); var mockExtractor = new Mock <IFieldExtractor>(); mockExtractor.Setup(e => e.ExpectedSource).Returns(typeof(string)); mockExtractor.Setup(e => e.FieldType).Returns(typeof(Exception)); mockExtractor.Setup(e => e.Execute(It.IsAny <string>())).Returns(v); var mockDecomp0 = new Mock <IExtractionStep>(); mockDecomp0.Setup(d => d.ExpectedSource).Returns(typeof(Exception)); mockDecomp0.Setup(d => d.Execute(It.IsAny <int>())).Returns(new DBValue[] { value0 }); var mockDecomp1 = new Mock <IExtractionStep>(); mockDecomp1.Setup(d => d.ExpectedSource).Returns(typeof(Exception)); mockDecomp1.Setup(d => d.Execute(It.IsAny <int>())).Returns(new DBValue[] { value1, value0 }); var decomps = new IExtractionStep[] { mockDecomp0.Object, mockDecomp1.Object }; var step = new DecomposingExtractionStep(mockExtractor.Object, decomps); var source = "Albany"; // Act var values = step.Execute(source); // Assert mockExtractor.Verify(e => e.Execute(source), Times.Once); mockDecomp0.Verify(d => d.Execute(v), Times.Once); mockDecomp1.Verify(d => d.Execute(v), Times.Once); values.Should().BeEquivalentTo(new DBValue[] { value0, value1, value0 }); }
[TestMethod] public void ExtractFromNull() { // Arrange var v = 100; var value = DBValue.Create(v); var mockExtractor = new Mock <IFieldExtractor>(); mockExtractor.Setup(e => e.ExpectedSource).Returns(typeof(string)); mockExtractor.Setup(e => e.FieldType).Returns(typeof(Exception)); mockExtractor.Setup(e => e.Execute(null)).Returns(null); var mockDecomp = new Mock <IExtractionStep>(); mockDecomp.Setup(d => d.ExpectedSource).Returns(typeof(Exception)); mockDecomp.Setup(d => d.Execute(It.IsAny <int>())).Returns(new DBValue[] { value, value }); mockDecomp.Setup(d => d.Execute(null)).Returns(new DBValue[] { DBValue.NULL, DBValue.NULL }); var decomps = new IExtractionStep[] { mockDecomp.Object }; var step = new DecomposingExtractionStep(mockExtractor.Object, decomps); string?source = null; // Act var values = step.Execute(source); // Assert values.Should().BeEquivalentTo(new DBValue[] { DBValue.NULL, DBValue.NULL }); }
[TestMethod] public void Construct() { // Arrange var mockExtractor = new Mock <IFieldExtractor>(); mockExtractor.Setup(e => e.ExpectedSource).Returns(typeof(string)); mockExtractor.Setup(e => e.FieldType).Returns(typeof(Exception)); var mockDecomp = new Mock <IExtractionStep>(); mockDecomp.Setup(d => d.ExpectedSource).Returns(typeof(Exception)); var decomps = new IExtractionStep[] { mockDecomp.Object }; // Act var step = new DecomposingExtractionStep(mockExtractor.Object, decomps); // Assert step.ExpectedSource.Should().Be(typeof(string)); }