• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Getting started with Windows Phone 7 and unit test
 

Getting started with Windows Phone 7 and unit test

on

  • 1,490 views

An introduction to unit testing in Windows Phone 7

An introduction to unit testing in Windows Phone 7

Statistics

Views

Total Views
1,490
Views on SlideShare
1,295
Embed Views
195

Actions

Likes
0
Downloads
5
Comments
0

2 Embeds 195

http://www.orangecode.it 194
http://webcache.googleusercontent.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Getting started with Windows Phone 7 and unit test Getting started with Windows Phone 7 and unit test Presentation Transcript

    • Getting started with Tests on your WP7 AppFriday, June 29, 2012
    • Who am I? • Developer freelance: – C# Asp.net Mvc, Wpf, Wp7 – Python Django – Blog: orangecode.it/blogFriday, June 29, 2012
    • What we’re going to seeFriday, June 29, 2012
    • What we’re going to see • What is a unit testFriday, June 29, 2012
    • What we’re going to see • What is a unit test • How to write itFriday, June 29, 2012
    • What we’re going to see • What is a unit test • How to write it • Integration Test vs Unit TestFriday, June 29, 2012
    • What we’re going to see • What is a unit test • How to write it • Integration Test vs Unit Test • Testing tools for WP7Friday, June 29, 2012
    • What we’re going to see • What is a unit test • How to write it • Integration Test vs Unit Test • Testing tools for WP7 • The first testFriday, June 29, 2012
    • What we’re going to see • What is a unit test • How to write it • Integration Test vs Unit Test • Testing tools for WP7 • The first test • Maintaining test suiteFriday, June 29, 2012
    • Let’s startFriday, June 29, 2012
    • From Wikipedia • A unit test is a piece of a code (usually a method) that invokes another piece of code and checks the correctness of some assumptions afterward. • If the assumptions turn out to be wrong, the unit test has failed. • A “unit” is a method or function.Friday, June 29, 2012
    • Good test properties • It should be automated and repeatable. • It should be easy to implement. • Once it’s written, it should remain for future use. • Anyone should be able to run it. • It should run at the push of a button. • It should run quickly. Roy OsheroveFriday, June 29, 2012
    • Good test properties • If your test doesn’t follow at least one of the previous rules, there’s a high probability that what you’re implementing isn’t a unit test. • You’ve done integration testing.Friday, June 29, 2012
    • Integration Test • Integration testing means testing two or more dependent software modules as a group.Friday, June 29, 2012
    • First Test 9Friday, June 29, 2012
    • Unit vs Integration Test • integration test: test many units of code that work together to evaluate one or more expected results from the software. • unit test: test only a single unit in isolation. 10Friday, June 29, 2012
    • Classic wp7 approach • Code coupled with UI – Xaml + Code Behind -> one class public partial class MainView : PhoneApplicationPage { public MainView() { InitializeComponent(); } } 11Friday, June 29, 2012
    • Classic wp7 approach Your code is NOT TESTABLE! 12Friday, June 29, 2012
    • MVVM Approach •Architectural Pattern •Derived from Presentation Model pattern (Fowler) •Clear separation between UI and Logic UI ViewModel Collections, DelegateCommand, Properties 13Friday, June 29, 2012
    • MVVM Approach • Code structure: – ViewModel (c#): Logic – View (Xaml): Presentation – No more code behind • Now the ViewModel (as a plain c# class) IS TESTABLE 14Friday, June 29, 2012
    • Unit Test framework • Nunit for Windows Phone 7 • No official mocking framework for Windows Phone 7, but I found out that Moq 3.1 for silverlight works! 15Friday, June 29, 2012
    • Test Runner • NUnit • Resharper • Test Driven.net 16Friday, June 29, 2012
    • Context • Application that resize images • Two boxes for the new size • Ok button • Error if the image is not in 4:3 17Friday, June 29, 2012
    • Solution structure WP7 App View ViewModel WP7 Class Library NUnit Library (via NuGet) TestSuite 18Friday, June 29, 2012
    • MainViewModel namespace OrangeCode.Resizer.ViewModel { public class MainViewModel { public int Height { get; set; } public int Width { get; set; } public bool RatioCheck { get { return Width*3 == Height*4; } } } } 19Friday, June 29, 2012
    • First test namespace OrangeCode.Resizer.Fixture { public class MainViewModelFixture { [Test] public void RatioCheck_InvalidSize_ReturnFalse() { var viewModel= new MainViewModel(); viewModel.Height = 100; viewModel.Width = 80; bool result= viewModel.RatioCheck; Assert.IsFalse(result); } } } 20Friday, June 29, 2012
    • First test [MethodName]_[StateUnderTest]_[ExpectedBehavior] [Test] public void RatioCheck_InvalidSize_ReturnFalse() { var viewModel= new MainViewModel(); viewModel.Height = 100; Arrange objects. viewModel.Width = 80; Act on an objects. bool result = viewModel.RatioCheck; Assert something expected. Assert.IsFalse(result); } 21Friday, June 29, 2012
    • Run test 22Friday, June 29, 2012
    • Refactor our test [TestFixture] public class MainViewModelFixture { private MainViewModel viewModel; [SetUp] executed before every test public void SetUp() { viewModel = new MainViewModel(); } [Test] public void RatioCheck_InvalidSize_ReturnFalse() { viewModel.Height = 100; viewModel.Width = 80; Assert.IsFalse(viewModel.RatioCheck); } } 23Friday, June 29, 2012
    • Refactor our test [TestFixture] public class MainViewModelFixture { [Test] public void RatioCheck_InvalidSize_ReturnFalse() { viewModel.Height = 100; viewModel.Width = 80; Assert.IsFalse(viewModel.RatioCheck); } [TearDown] public void TearDown() { viewModel=null; executed after every test } } 24Friday, June 29, 2012
    • Run test again 25Friday, June 29, 2012
    • Some more cases [TestCase(10,10)] [TestCase(12, 12)] [TestCase(0, 0)] public void RatioCheck_InvalidSize_ReturnFalse(int height,int width) { viewModel.Height = height; viewModel.Width = width; Assert.IsFalse(viewModel.RatioCheck); } 26Friday, June 29, 2012
    • Some more cases 27Friday, June 29, 2012
    • From red to green namespace OrangeCode.Resizer.ViewModel { public class MainViewModel { public int Height { get; set; } public int Width { get; set; } public bool RatioCheck { get { if(Width>0 && Height>0) return Width*3 == Height*4; return false; } } } } 28Friday, June 29, 2012
    • Run tests 29Friday, June 29, 2012
    • Test Driven Development • We just made it! • Life Cycle: – Write test (red) – Write logic to pass the test (green) – Refactor code (refactor) – Again.. 30Friday, June 29, 2012
    • Back to the first test [TestCase(10,10)] [TestCase(12, 12)] [TestCase(0, 0)] public void RatioCheck_InvalidSize_ReturnFalse(int height,int width) { viewModel.Height = height; viewModel.Width = width; Assert.IsFalse(viewModel.RatioCheck); } 31Friday, June 29, 2012
    • Good test properties • It should be automated and repeatable. • It should be easy to implement. • Once it’s written, it should remain for future use. • Anyone should be able to run it. • It should run at the push of a button. • It should run quickly. 32Friday, June 29, 2012
    • What to test in WP7 • Properties with logic (not only get/set) • Command • Navigation between pages • Interaction with storage • Converter • Event 33Friday, June 29, 2012
    • Final thoughts • Use small consistent test – One test can test only one feature • If work with legacy code – create an integration test for every feature – split a integration test in few unit test 34Friday, June 29, 2012
    • Recap • What is a unit test • How to write it • Integration Test vs Unit Test • Testing tools • The first test • Maintaining test suite 35Friday, June 29, 2012
    • Be in contact Mail: michele@orangecode.it Twitter: @piccoloaiutante Web: www.orangecode.it Blog: www.orangecode.it/blog GitHub: https://github.com/piccoloaiutante Community: WEBdeBS 36Friday, June 29, 2012
    • Grazie a DotNET Lombardia! 37Friday, June 29, 2012