Mocking tools for easier unit testing

Slides:



Advertisements
Similar presentations
Project Tracking Tools Trello, Asana, Basecamp, GitHub Issue Tracker, TRAC SoftUni Team Technical Trainers Software University
Advertisements

AngularJS Directives Defining Custom Directives SoftUni Team Technical Trainers Software University
Software Testing Lifecycle Exit Criteria Evaluation, Continuous Integration Ivan Yonkov Technical Trainer Software University.
Build Processes and Continuous Integration Automating Build Processes Software University Technical Trainers SoftUni Team.
Processing Redis with.NET How to Operate with Redis Databases SoftUni Team Technical Trainers Software University
Project Tracking Tools Trello, Asana, Basecamp, GitHub Issue Tracker, TRAC Angel Georgiev Part-time Trainer Software University
Test-Driven Development Learn the "Test First" Approach to Coding SoftUni Team Technical Trainers Software University
Asynchronous Web Services Writing Asynchronous Web Services SoftUni Team Technical Trainers Software University
Mocking with Moq Tools for Easier Unit Testing SoftUni Team Technical Trainers Software University
Mocking Unit Testing Methods with External Dependencies SoftUni Team Technical Trainers Software University
Mocking with Moq Mocking tools for easier unit testing Svetlin Nakov Technical Trainer Software University
Mocking tools for easier unit testing Telerik Software Academy High Quality Code.
Doctrine The PHP ORM SoftUni Team Technical Trainers Software University
Stacks and Queues Processing Sequences of Elements SoftUni Team Technical Trainers Software University
Generics SoftUni Team Technical Trainers Software University
Version Control Systems
Auto Mapping Objects SoftUni Team Database Applications
Static Members and Namespaces
Databases basics Course Introduction SoftUni Team Databases basics
C# Basic Syntax, Visual Studio, Console Input / Output
Interface Segregation / Dependency Inversion
Services & Dependency Injection
Introduction to MVC SoftUni Team Introduction to MVC
Deploying Web Application
PHP MVC Frameworks Course Introduction SoftUni Team Technical Trainers
Reflection SoftUni Team Technical Trainers Java OOP Advanced
C# Database Fundamentals with Microsoft SQL Server
Application Architecture, Redux
ASP.NET Integration Testing
ASP.NET Unit Testing Unit Testing Web API SoftUni Team ASP.NET
Classes, Properties, Constructors, Objects, Namespaces
State Management Cookies, Sessions SoftUni Team State Management
EF Code First (Advanced)
PHP MVC Frameworks MVC Fundamentals SoftUni Team Technical Trainers
C# Databases Advanced with Microsoft SQL Server
Mocking Tool for easier unit testing
Entity Framework: Code First
Repeating Code Multiple Times
Databases advanced Course Introduction SoftUni Team Databases advanced
Install and configure theme
Entity Framework: Relations
Caching Data in ASP.NET MVC
Functional Programming
Transactions in Entity Framework
ASP.NET MVC Introduction
C# Advanced Course Introduction SoftUni Team C# Technical Trainers
Databases Advanced Course Introduction SoftUni Team Databases Advanced
Best Practices and Architecture
Best practices and architecture
Design & Module Development
Multidimensional Arrays, Sets, Dictionaries
Extending functionality using Collections
ASP.NET REST Services SoftUni Team ASP.NET REST Services
Making big SPA applications
Manual Mapping and AutoMapper Library
Functional Programming
C# Advanced Course Introduction SoftUni Team C# Technical Trainers
Introduction to TypeScript & Angular
CSS Transitions and Animations
Train the Trainers Course
Iterators and Comparators
Spring Data Advanced Querying
Building Rock-Solid Software
Directives & Forms Capturing User Input SoftUni Team
Version Control Systems
JavaScript Frameworks & AngularJS
Polymorphism, Interfaces, Abstract Classes
/^Hel{2}o\s*World\n$/
Lean .NET stack for building modern web apps
CSS Transitions and Animations
Presentation transcript:

Mocking tools for easier unit testing Mocking with Moq Mocking tools for easier unit testing SoftUni Team Technical Trainers Software University http://softuni.bg

Table of Contents Testable Code Mocking Moq

Testable 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

How to Write Testable Code Public API should work with interfaces, not implementation classes (IEnumerable vs. List) Bad code: Good code: public Card[] Cards { get; private set; } public IList<ICard> Cards { get; private set; }

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

How to Write Testable Code Bad Example: public interface IViewBase { … } public interface IPresenterBase { … } public class MemoryLayoutView : IViewBase { … } public class MemoryLayoutPresenter : IPresenterBase { private MemoryLayoutView view; public MemoryLayoutPresenter() this.view = new MemoryLayoutView(); }

How to Write Testable Code 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)>();

Mocking

Mocking Makes Unit Testing more effective Avoid writing boring boilerplate code Isolate dependencies among units Asserts expectations for code quality E.g. checks that a method is called only once

Moq

Install from the NuGet package manager Refer the library Use its API Moq Install from the NuGet package manager Refer the library Use its API https://github.com/Moq/moq4 var mock = new Mock<ICarsRepository>(); mock.Setup(r => r.Add(It.IsAny<Car>())).Verifiable(); mock.Setup(r => r.All()).Returns(this.FakeCarCollection);

Moq The most often used APIs: .Setup() .Verifiable() .Callback() .Returns() .Throws() It.Is<type>(x => condition)

Mocking Live Demo

Mocking https://softuni.bg/courses/high-quality-code/ © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.

License This course (slides, examples, demos, videos, homework, etc.) is licensed under the "Creative Commons Attribution- NonCommercial-ShareAlike 4.0 International" license Attribution: this work may contain portions from "High Quality Code" course by Telerik Academy under CC-BY-NC-SA license © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.

Free Trainings @ Software University Software University Foundation – softuni.org Software University – High-Quality Education, Profession and Job for Software Developers softuni.bg Software University @ Facebook facebook.com/SoftwareUniversity Software University @ YouTube youtube.com/SoftwareUniversity Software University Forums – forum.softuni.bg © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.