Download presentation
Presentation is loading. Please wait.
Published byHilary Griffin Modified over 9 years ago
1
Mocking with Moq Mocking tools for easier unit testing Svetlin Nakov Technical Trainer www.nakov.com Software University http://softuni.bg
2
2 Testable Code Mocking Moq Table of Contents
3
Testable Code
4
4 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_controlhttp://en.wikipedia.org/wiki/Inversion_of_control How to Write Testable Code
5
5 Public API should work with interfaces, not implementation classes (IEnumerable vs. List) Bad code: Good code: How to Write Testable Code public IList Cards { get; private set; } public Card[] Cards { get; private set; }
6
6 Dependency Injection Ninject – http://www.ninject.org/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
7
7 Bad Example: How to Write Testable Code public interface IViewBase { … } public interface IPresenterBase { … } public class MemoryLayoutView : IViewBase { … } public class MemoryLayoutPresenter : IPresenterBase { private MemoryLayoutView view; private MemoryLayoutView view; public MemoryLayoutPresenter() public MemoryLayoutPresenter() { this.view = new MemoryLayoutView(); this.view = new MemoryLayoutView(); }}
8
8 How to Write Testable Code public interface IViewBase { … } public interface IPresenterBase { … } public class MemoryLayoutView : IViewBase { … } public class MemoryLayoutPresenter : IPresenterBase { private IViewBase view; private IViewBase view; public MemoryLayoutPresenter(IViewBase myView) public MemoryLayoutPresenter(IViewBase myView) { this.view = myView; this.view = myView; }} public class Program { static void Main() static void Main() { InjectionContainer.Create (); InjectionContainer.Create (); }}
9
Mocking
10
10 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 Mocking
11
Moq
12
12 Install from the NuGet package manager Refer the library Use its API https://github.com/Moq/moq4 https://github.com/Moq/moq4 Moq var mock = new Mock (); mock.Setup(r => r.Add(It.IsAny ())).Verifiable(); mock.Setup(r => r.All()).Returns(this.FakeCarCollection);
13
13 The most often used APIs: .Setup() .Verifiable() .Callback() .Returns() .Throws() It.Is (x => condition) Moq
14
Mocking Live Demo
15
? ? ? ? ? ? ? ? ? https://softuni.bg/courses/high-quality-code/ Mocking
16
License This course (slides, examples, demos, videos, homework, etc.) is licensed under the "Creative Commons Attribution- NonCommercial-ShareAlike 4.0 International" licenseCreative Commons Attribution- NonCommercial-ShareAlike 4.0 International 16 Attribution: this work may contain portions from "High Quality Code" course by Telerik Academy under CC-BY-NC-SA licenseHigh Quality CodeCC-BY-NC-SA
17
Free Trainings @ Software University Software University Foundation – softuni.orgsoftuni.org Software University – High-Quality Education, Profession and Job for Software Developers softuni.bg softuni.bg Software University @ Facebook facebook.com/SoftwareUniversity facebook.com/SoftwareUniversity Software University @ YouTube youtube.com/SoftwareUniversity youtube.com/SoftwareUniversity Software University Forums – forum.softuni.bgforum.softuni.bg
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.