mocking tools for easier unit testing telerik software academy high quality code

20
Mocking with Moq and JustMock Mocking tools for easier unit testing Telerik Software Academy http://academy.telerik.com High Quality Code

Upload: teresa-matthews

Post on 20-Jan-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Mocking tools for easier unit testing Telerik Software Academy  High Quality Code

Mocking with Moq and JustMock

Mocking tools for easier unit testing

Telerik Software Academyhttp://academy.telerik.com

High Quality Code

Page 2: Mocking tools for easier unit testing Telerik Software Academy  High Quality Code

Table of Contents Testable Code Mocking Moq

Moq demo JustMock

JustMock demo

2

Page 3: Mocking tools for easier unit testing Telerik Software Academy  High Quality Code

Testable Code

Page 4: Mocking tools for easier unit testing Telerik Software Academy  High Quality Code

How to Write Testable Code

Inversion of Control Pattern There is a decoupling of the execution of

a certain task from implementation Every module can focus on what it is

designed for Modules make no assumptions about

what other systems do but rely on their contracts

Replacing modules has no side effect on other modules

More info at http://en.wikipedia.org/wiki/Inversion_of_control

4

Page 5: Mocking tools for easier unit testing Telerik Software Academy  High Quality Code

How to Write Testable Code

Public API should work with interfaces, not implementation classes (IEnumerable vs. List)

Bad code:

Good code:

5

public IList<ICard> Cards { get; private set; }

public Card[] Cards { get; private set; }

Page 6: Mocking tools for easier unit testing Telerik Software Academy  High Quality Code

How to Write Testable Code

Dependency Injection Ninject – http://www.ninject.org/

Consists of: A dependent consumer A declaration of a component's

dependencies, defined as interface contracts

An injector (sometimes referred to as a provider or container) that creates instances of classes that implement a given dependency interface on request

6

Page 7: Mocking tools for easier unit testing Telerik Software Academy  High Quality Code

How to Write Testable Code

Bad:

7

public interface IViewBase {}public interface IPresenterBase {}public class MemoryLayoutView: IViewBase {}

public class MemoryLayoutPresenter: IPresenterBase{ private MemoryLayoutView view = new MemoryLayoutView(); public MemoryLayoutPresenter() { }}

Page 8: Mocking tools for easier unit testing Telerik Software Academy  High Quality Code

How to Write Testable Code Good:

8

public interface IViewBase {}public interface IPresenterBase {}public class MemoryLayoutView: IViewBase {}public class MemoryLayoutPresenter : IPresenterBase{ private IViewBase view;

public MemoryLayoutPresenter(IViewBase myView) { this.view = myView; }}

public class Program { static void Main() { InjectionContainer.Create<typeof(MemoryLayoutPresenter)>(); }}

Page 9: Mocking tools for easier unit testing Telerik Software Academy  High Quality Code

Mocking

Page 10: Mocking tools for easier unit testing Telerik Software Academy  High Quality Code

Mocking Makes Unit Testing more effective

Avoid writing boring boilerplate code

Isolate dependencies among units Asserts expectations for code quality Ex: Checks that a method is called

only once

10

Page 11: Mocking tools for easier unit testing Telerik Software Academy  High Quality Code

Moq

Page 12: Mocking tools for easier unit testing Telerik Software Academy  High Quality Code

Moq Install from the NuGet package manager

Refer the library Use its API https://github.com/Moq/moq4

12

var mock = new Mock<ICarsRepository>();mock.Setup(r => r.Add(It.IsAny<Car>())).Verifiable();mock.Setup(r => r.All()).Returns(this.FakeCarCollection);

Page 13: Mocking tools for easier unit testing Telerik Software Academy  High Quality Code

Moq The most often used APIs:

.Setup() .Verifiable() .Callback() .Returns() .Throws() It.Is<type>(x => condition)

13

Page 14: Mocking tools for easier unit testing Telerik Software Academy  High Quality Code

Telerik JustMock

Page 15: Mocking tools for easier unit testing Telerik Software Academy  High Quality Code

Telerik JustMock Install from the Telerik account

http://www.telerik.com/products/mocking.aspx

Use the Visual Studio NuGet package manager

15

CarsData = Mock.Create<ICarsRepository>();Mock.Arrange(() => CarsData.Add(Arg.IsAny<Car>())).DoNothing();Mock.Arrange(() => CarsData.All()).Returns(FakeCarCollection);Mock.Arrange(() => CarsData.Search(Arg.AnyString)) .Returns(FakeCarCollection.Where( c => c.Make == "BMW").ToList());Mock.Arrange(() => CarsData.GetById(Arg.AnyInt)) .Returns(FakeCarCollection.First());

Page 16: Mocking tools for easier unit testing Telerik Software Academy  High Quality Code

Telerik JustMock Two versions:

Free version – excellent when the code is written with testability in mind

Paid version – mocks everything (mscorlib, EntityFramework, SQL), legacy code base which is not written to be testable, statics, privates, etc.

More information here: http://

www.telerik.com/help/justmock/getting-started-commercial-vs-free-version.html

16

Page 17: Mocking tools for easier unit testing Telerik Software Academy  High Quality Code

Telerik JustMock The most often used APIs:

.CallOriginal() .Returns() .DoInstead() .DoNothing() .Throw() Arg.Matches<type>(x => condition)

17

Page 18: Mocking tools for easier unit testing Telerik Software Academy  High Quality Code

MockingLive Demo

Page 19: Mocking tools for easier unit testing Telerik Software Academy  High Quality Code

форум програмиране, форум уеб дизайнкурсове и уроци по програмиране, уеб дизайн – безплатно

програмиране за деца – безплатни курсове и уроцибезплатен SEO курс - оптимизация за търсачки

уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop

уроци по програмиране и уеб дизайн за ученициASP.NET MVC курс – HTML, SQL, C#, .NET, ASP.NET MVC

безплатен курс "Разработка на софтуер в cloud среда"

BG Coder - онлайн състезателна система - online judge

курсове и уроци по програмиране, книги – безплатно от Наков

безплатен курс "Качествен програмен код"

алго академия – състезателно програмиране, състезанияASP.NET курс - уеб програмиране, бази данни, C#, .NET, ASP.NET

курсове и уроци по програмиране – Телерик академия

курс мобилни приложения с iPhone, Android, WP7, PhoneGapfree C# book, безплатна книга C#, книга Java, книга C# Дончо Минков - сайт за програмиране

Николай Костов - блог за програмиранеC# курс, програмиране, безплатно

?? ? ?

??? ?

?

? ?

??

?

?

? ?

Questions?

?форум програмиране, форум уеб дизайн

курсове и уроци по програмиране, уеб дизайн – безплатно

програмиране за деца – безплатни курсове и уроцибезплатен SEO курс - оптимизация за търсачки

уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop

уроци по програмиране и уеб дизайн за ученициASP.NET MVC курс – HTML, SQL, C#, .NET, ASP.NET MVC

безплатен курс "Разработка на софтуер в cloud среда"

BG Coder - онлайн състезателна система - online judge

курсове и уроци по програмиране, книги – безплатно от Наков

безплатен курс "Качествен програмен код"

алго академия – състезателно програмиране, състезанияASP.NET курс - уеб програмиране, бази данни, C#, .NET, ASP.NET

курсове и уроци по програмиране – Телерик академия

курс мобилни приложения с iPhone, Android, WP7, PhoneGapfree C# book, безплатна книга C#, книга Java, книга C# Дончо Минков - сайт за програмиране

Николай Костов - блог за програмиранеC# курс, програмиране, безплатно

?? ? ?

??? ?

?

? ?

??

?

?

? ?

Questions?

?

Mocking with Moq and JustMock

http://academy.telerik.com

Page 20: Mocking tools for easier unit testing Telerik Software Academy  High Quality Code

Free Trainings @ Telerik Academy

C# Programming @ Telerik Academy csharpfundamentals.telerik.com

Telerik Software Academy academy.telerik.com

Telerik Academy @ Facebook facebook.com/TelerikAcademy

Telerik Software Academy Forums forums.academy.telerik.com 20