public void AlternateRowsMethodTest() { //Create spreadsheet and load data var spreadsheet = new SpreadsheetView(); var privateAccessor = new PrivateAccessor(spreadsheet); var itemList = new List<TestData> { new TestData(), new TestData() }; spreadsheet.ItemsSource = itemList; spreadsheet.OnApplyTemplate(); Mock.NonPublic.Arrange(typeof(SpreadsheetView), "PopulateCells", ArgExpr.IsAny<SpreadsheetItemContainer>(), ArgExpr.IsAny<IWrap>()).DoNothing(); //Get item wrappers var item1 = spreadsheet.ItemsCollection[0]; var item2 = spreadsheet.ItemsCollection[1]; //Call ItemContainerGenerator overrides Mock.NonPublic.Arrange(typeof(CellBase), "SetEditorParams").IgnoreInstance().DoNothing(); spreadsheet.ItemContainerStyle = new Style(typeof(SpreadsheetItemContainer)); var container1 = privateAccessor.CallMethod("GetContainerForItemOverride") as SpreadsheetItemContainer; privateAccessor.CallMethod("PrepareContainerForItemOverride", container1, item1); var container2 = privateAccessor.CallMethod("GetContainerForItemOverride") as SpreadsheetItemContainer; privateAccessor.CallMethod("PrepareContainerForItemOverride", container2, item2); //Mock SetIsAlternate method for all SpreadsheetItemContainer instances var containerMock = Mock.Create<SpreadsheetItemContainer>(Constructor.Mocked); Mock.Arrange(() => containerMock.SetIsAlternate()).IgnoreInstance(); //Make spreadsheet invisible Mock.Arrange(() => spreadsheet.IsVisible).Returns(false); Mock.Arrange(() => spreadsheet.Items).CallOriginal().OccursNever(); spreadsheet.AlternateRows(); Mock.Assert(spreadsheet); //Test AlternateRows method in normal conditions Mock.Arrange(() => spreadsheet.IsVisible).Returns(true); Mock.Arrange(() => spreadsheet.Items).CallOriginal().MustBeCalled(); spreadsheet.AlternateRows(); var containersDict = privateAccessor.GetField("_containersDict") as Dictionary<IWrap, SpreadsheetItemContainer>; Mock.Assert(() => containersDict[item1].SetIsAlternate(), Occurs.Once()); Mock.Assert(() => containersDict[item2].SetIsAlternate(), Occurs.Once()); Mock.Assert(spreadsheet); }