+ All Categories
Home > Documents > XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After...

XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After...

Date post: 26-Dec-2015
Category:
Upload: sara-lindsey
View: 214 times
Download: 2 times
Share this document with a friend
Popular Tags:
36
xUnit.net Extensibility Brad Wilson Jim Newkirk
Transcript
Page 1: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

xUnit.net ExtensibilityBrad WilsonJim Newkirk

Page 2: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

Schedule

Assert Extensibility 9:00

Before/After Extensibility 9:45

Fact Extensibility 10:15

BREAK 10:45

Fixture Extensibility 11:00

Runner Extensibility 11:30

Putting it all Together 11:45

Page 3: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

Assert Extensibility

Page 4: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

Not Easy to Add New Asserts

Limitations of the platform & language

Provide core assertions with the framework

Keep “assert language” consistent

No differentiation between failure and exceptions

Page 5: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

Customization of Comparisons

IEquatable / IEqualityComparer Assert.Contains

Assert.Equal

IComparable / IComparer Assert.InRange

Fallback for Contains & Equal

Page 6: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

Asserts that Return Values

When type is tested Assert.IsAssignableFrom

Assert.IsType

Assert.Throws

When collections are tested Assert.Single

Exception catcher Record.Exception

Page 7: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

ExampleCompare dates without times

Page 8: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

ExerciseFinish by 9:45

Page 9: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

Before/After Extensibility

Page 10: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

Design

Cross-cutting concerns Reusable attribute

Initializing environment

Cleaning up after stateful tests

Runs regardless of test outcome

Has no access to test class or method

Unspecified order (compose for guarantee)

Page 11: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

ExampleRollback database

Page 12: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

Brainstorming ExerciseFinish by 10:15

Page 13: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

Fact Extensibility

Page 14: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

Design

Answers: “What is a test method?” Enumeration of tests

Execution of tests

Metadata (skip, timeout, display name)

Page 15: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

Why?

Metadata changes “I want all my tests to have a timeout”

“I want the display name of my test to be something other than method name”

Enumeration changes “I want this test method to be run many times, perhaps with

different input values for each run”

Execution changes “I want to do something different than just running the

method with no parameters”

Page 16: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

Example[Theory] attribute

Page 17: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

ExerciseFollowed by break, back by 11:00

Page 18: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

Fixture Extensibility

Page 19: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

IUseFixture

Share reusable fixture setup and teardown Constructor

Dispose

Most frameworks encourage base classes here Lack of multiple inheritance in the CLR

“Inherit to be reused, not to reuse”

Page 20: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

ExampleTest data seed & cleanup

Page 21: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

ITestClassCommand and RunWith

Answers: “What is a test class?” Pre- and post-fixture behavior

Pre- and post-test behavior

Test class creation & cleanup

Test method discovery

Test method ordering

Page 22: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

ExampleRemove Randomization

Page 23: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

ExerciseFinish by 11:30

Page 24: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

Runner Extensibility

Page 25: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

Design

Version resilient runner APIs

Link against xunit.runner.utility.dll, not xunit.dll

Test assembly lives in a separate app domain Assembly

Configuration File

(Optional) Shadow Copy

Page 26: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

Low-Level API

Exector (remote)

ExecutorWrapper (local)

On the wire, it’s: XML as a string (for status)

Boolean continue flag (to cancel)

Don’t use this.

Page 27: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

High-Performance API

Thin wrapper on top of ExecutorWrapper TestRunner

TestRunnerResult

IRunnerLogger

Cracks the XML into simple values

Not stateful; callback is mandatory

Runners: MSBuild, TD.NET, Resharper

Page 28: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

Object-Oriented API

Object model on top of ExecutorWrapper MultiAssemblyTestEnvironment

TestAssembly, TestClass, TestMethod

TestStatus

ITestMethodRunnerCallback

Cracks the XML into objects

Stateful; callback is optional

Runners: Console, GUI

Page 29: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

Project files (.xunit)

One or more assemblies

Output types & locations

Filters

Page 30: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

Examplexunit.console

Page 31: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

Putting it all Together

Page 32: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

ExampleBDD with [Observation]

Page 33: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

ExampleBDD with SubSpec

Page 34: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

ExampleAmalga Best Practice Analyzer

Page 35: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

Exercise

Page 36: XUnit.net Extensibility Brad Wilson Jim Newkirk. Schedule Assert Extensibility9:00 Before/After Extensibility9:45 Fact Extensibility10:15 BREAK10:45 Fixture.

Thank You!http://xunit.codeplex.com/

@bradwilson @jamesnewkirk @xunit


Recommended