public void NetworkComputeTest() { //given ILayer firstLayer = MockRepository.GenerateMock <ILayer>(); List <List <double> > firstLayerResults = new List <List <double> > { new List <double> { 1.0, 2.0, 3.0, 4.0 }, new List <double> { 1.0, 2.0, 3.0, 4.0 }, new List <double> { 1.0, 2.0, 3.0, 4.0 }, new List <double> { 1.0, 2.0, 3.0, 4.0 }, }; firstLayer.Stub(layer => layer.Compute(Arg <IEnumerable <IEnumerable <double> > > .Is.Anything, Arg <int> .Is.Anything)).Return(firstLayerResults); firstLayer.Stub(layer => layer.Neurons).Return(new List <INeuron> { MockRepository.GenerateMock <INeuron>(), MockRepository.GenerateMock <INeuron>(), MockRepository.GenerateMock <INeuron>(), MockRepository.GenerateMock <INeuron>() }); List <double> secondLayerResults = new List <double> { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 }; ILayer secondLayer = MockRepository.GenerateMock <ILayer>(); secondLayer.Stub(layer => layer.Compute(Arg <IEnumerable <IEnumerable <double> > > .Is.Anything)).Return(secondLayerResults); secondLayer.Stub(layer => layer.Neurons).Return(new List <INeuron> { MockRepository.GenerateMock <INeuron>(), MockRepository.GenerateMock <INeuron>(), MockRepository.GenerateMock <INeuron>(), MockRepository.GenerateMock <INeuron>(), MockRepository.GenerateMock <INeuron>(), MockRepository.GenerateMock <INeuron>(), }); int expectedNeuronNumber = secondLayer.Neurons.Count(); ILayerFactory layerFactory = MockRepository.GenerateMock <ILayerFactory>(); layerFactory.Stub(lf => lf.ConstructLayer( Arg <double> .Is.Anything, Arg <int> .Is.Anything, Arg <int> .Is.Anything, Arg <string> .Is.Equal("First")) ).Return(firstLayer); layerFactory.Stub(lf => lf.ConstructLayer( Arg <double> .Is.Anything, Arg <int> .Is.Anything, Arg <int> .Is.Anything, Arg <string> .Is.Equal("Second")) ).Return(secondLayer); List <List <double> > inputs = new List <List <double> > { new List <double> { 1.0, 2.0 }, new List <double> { 1.0, 2.0 } }; List <LayerDescription> layersDescriptions = new List <LayerDescription> { new LayerDescription { Bias = 1.0, LayerFactory = layerFactory, Name = "First", NeuronNumber = 4 }, new LayerDescription { Bias = 1.0, LayerFactory = layerFactory, Name = "Second", NeuronNumber = 6 } }; Network network = new Network(2, layersDescriptions); //when List <double> results = network.Compute(inputs).ToList(); //then CollectionAssert.AreEqual(secondLayerResults, results); firstLayer.AssertWasCalled(layer => layer.Compute(Arg <IEnumerable <IEnumerable <double> > > .Is.Equal(inputs), Arg <int> .Is.Equal(expectedNeuronNumber))); secondLayer.AssertWasCalled(layer => layer.Compute(Arg <IEnumerable <IEnumerable <double> > > .Is.Equal(firstLayerResults))); }