Timmy Kokke Silverlight / ASP.Net Developer UNIT4 Internet Solutions Expression Blend MVP
Basics of MVVM Unit Testing Silverlight Unit Testing framework StatLight
ModelModel ViewView ViewModelViewModel
ModelModel ViewView ViewModelViewModel
ModelModel ViewView ViewModelViewModel
ModelModel ViewView ViewModelViewModel
ModelModel ViewView ViewModelViewModel Databinding Commands Methods Events
Unit tests are consistent, isolated, fast and repeatable
Test only small units of work TestName = Requirement 1 Assert per test Self explanatory Readability over Maintainability
Silverlight Toolkit Runs in browser, no support for MsTest
[TestClass] public class ExampleTests{ [TestMethod] public class Adding_1_And_1_Should_Be_2(){ int result = 1 + 1; Assert.AreEqual(2, result); }
ServerServer Silverlight Client GamesViewModelGamesViewModel GamesViewGamesView GamesDataServiceGamesDataService WCF Ria Service DatabaseDatabase
Unit Test ServerServer Silverlight Client GamesViewModelGamesViewModel GamesViewGamesView GamesDataServiceGamesDataService WCF Ria Service DatabaseDatabase TestGamesDataServiceTestGamesDataService IGamesDataServiceIGamesDataService GamesViewModelTestsGamesViewModelTests
[TestMethod] [Tag("Rating")] public void Setting_Ratings_Should_Set_AverageRating() { Rating rating = new Rating(); rating.GameplayRating = 4; rating.GraphicsRating = 2; Assert.AreEqual(3, rating.AverageRating); }
[TestMethod] [Description("Testing implementation of IDataErrorInfo."+ "Empty String Name should return Error.")] public void Getting_ErrorInfo_For_Empty_Name_Should_Return_Error() { Rating errorInfo = new Rating {Name = string.Empty}; string result = errorInfo["Name"]; Assert.IsFalse(string.IsNullOrWhiteSpace(result)); }
[TestMethod] [Asynchronous] public void Executing_InitializeCommand_Should_Get_Publishers() { PublishersViewModel viewModel = new PublishersViewModel( new TestPublishersDataService()); viewModel.PropertyChanged += (s, a) => { Assert.IsTrue(viewModel.Publishers != null); EnqueueTestComplete(); }; viewModel.InitializeCommand.Execute(null); }
[TestMethod] [Bug("Submitting is not implemented at this moment.")] [WorkItem(1543)] [Asynchronous] public void Executing_SubmitCommand_Should_Navigate_To_GamesList() { DecoupledEventAggregator.GetInstance().GetEvent ().Subscribe((a) => { Assert.IsTrue(true); EnqueueTestComplete(); }); RatingViewModel viewModel = new RatingViewModel(new TestGamesDataService()); viewModel.SubmitCommand.Execute(null); }
[TestMethod] [Asynchronous] [Timeout(250)] public void Executing_GetMoreCommand_Should_Respond_In_250ms() { PublishersViewModel viewModel = new PublishersViewModel(new TestPublishersDataService()); viewModel.PropertyChanged += (s, a) => { Assert.IsTrue(true); EnqueueTestComplete(); }; viewModel.GetMoreCommand.Execute(null); }
[TestMethod] [ExpectedException(typeof(ArgumentNullException))] public void Executing_SubmitCommand_With_Null_Should_Throw_Exception() { RatingViewModel viewModel = new RatingViewModel(new TestGamesDataService()); viewModel.SubmitCommand.Execute(null); }
Command line tool Possible to integrate in TFS build Continuous mode
Timmy Kokke Silverlight and Expression Usergroup 9 November next meeting !