Create your own polished presentation in minutes. Just describe what you need.
Free to try, no credit card requiredMocking .NET Without Hurting Its Feelings
June 23, 2018
John M. Wright
john@wrightfully.com
@wright2tweet
www.wrightfully.com
© Copyright 2018 John M. Wright
wrightfully.com/mocktalk
https://www.ftc.gov/news-events/media-resources/truth-advertising/advertisement-endorsements
As per the FTC’s Guides Concerning the Use of Endorsements and Testimonials in Advertising:
Please be aware that I have received a Community license, at no cost to me, for Typemock Isolator, due to involvement in the development community and my writing/speaking on mocking topics.
Legal Disclaimer
class DependenciesHog
{
public string foo
{
get;
set;
}
private void bar(int x)
{
//I do stuff
}
public event BigEvent EventHorizon;
private void SpaceFiller()
{
while (true)
{
LookInteresting();
}
}
}
class DependenciesHog
{
public string foo
{
get;
set;
}
private void bar(int x)
{
//I do stuff
}
public event BigEvent EventHorizon;
private void SpaceFiller()
{
while (true)
{
LookInteresting();
}
}
}
Why use a Mocking Framework?
Custom Mocks
Using Hand-Crafted, Artisanal Mocks
Class Being Tested
mock
test double
What can they do?
mock.VerifyAllExpectations();
mock.AssertWasCalled(x => x.MyMethod());
mock
vs
stub
vs
stub
A rose by any other name
would smell as sweet
work about the same
mock types
How do they do it?
Per 5 Build Servers:
as of 2018-01-22
Code Examples (aka: What can you do?)
Code being tested
Example Test using a Mock
Using Moq Syntax
Unconstrained Code Examples
Typemock Syntax
Code being tested
MS Fakes Syntax
Unconstrained Frameworks:
Make Your Own Man-In-The-Middle Attack
Constrained Frameworks:
Limitations of Class Inheritance
Constrained Frameworks:
Class Inheritance On-Demand
internal types & members
Mocking Internal Types/Members
AssemblyInfo.cs
[assembly: InternalsVisibleTo("Your.TestAssembly")]
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")]
sealed types
Generated Classes:
ICorProfilerInfo::
SetILFunctionBody
Hijacked Code:
The New Guy In Town
$ $ $
DateTime.Now
All that, plus:
My test
value
Mock
class DatabaseConnection
{
}
What can
I expect?
private members
JITCompilationStarted
Unconstrained
Constrained
public types & members
dynamic
Tests
More Info @
wrightfully.com/mocktalk
methods, properties, events
class DatabaseConnection
{
}
substitute
http://mimiandeunice.com/2011/07/19/expectations/
shim
class AnotherOne
{
}
static types & members
Using A Mocking Framework
File I/O
$$$
UI
$$
Integration
$
Unit Tests
FREE
158 members!
partial
Unconstrained
.VerifyAll()
Great for testing "legacy" code.
Best fit for code written with testing in mind.
interfaces
fake
virtual / abstract members
strict
Constrained
Create your own polished presentation in minutes. Just describe what you need.
Free to try, no credit card required