public void Test() { var expresion = new NodeBinary( new NodeNumber(50), new NodeNumber(25), (n1, n2) => n1 + n2 ); Assert.AreEqual(75d, expresion.Eval()); foreach (var expr in _expresionsToTest) { var parser = new Parser(expr.Key); Assert.AreEqual(expr.Value, parser.GetExpresionTree().Eval()); } }
public void EvalThroughFunction() { var nodeMockReturns = _fixture.Create <double>(); var nodeMockLeft = new Mock <Node>(); var nodeMockRight = new Mock <Node>(); nodeMockLeft.Setup(_ => _.Eval(It.IsAny <IContext>())).Returns(nodeMockReturns).Verifiable(); nodeMockRight.Setup(_ => _.Eval(It.IsAny <IContext>())).Returns(nodeMockReturns).Verifiable(); var functionMockReturns = _fixture.Create <double>(); var functionMock = new Mock <Func <double, double, double> >(); // настраиваем Mock функции - при вызове функции с аргументом nodeMockReurns, возвращаем functionMockReturns, также помечаем Verifiable. functionMock.Setup(_ => _(nodeMockReturns, nodeMockReturns)).Returns(functionMockReturns).Verifiable(); var sut = new NodeBinary(nodeMockLeft.Object, nodeMockRight.Object, functionMock.Object); var result = sut.Eval(null); // знаем, что IContext игнорируется - порицаем Assert.Equal(functionMockReturns, result); // ждем что результат будет равен, тому что вернет функция. Первым передается ожидаемое значение, вторым проверяемое. Mock.Verify(nodeMockLeft, nodeMockRight, functionMock); }