Coder Social home page Coder Social logo

zero-ghub / autofixture Goto Github PK

View Code? Open in Web Editor NEW

This project forked from autofixture/autofixture

0.0 1.0 0.0 102.25 MB

AutoFixture is an open source library for .NET designed to minimize the 'Arrange' phase of your unit tests in order to maximize maintainability. Its primary goal is to allow developers to focus on what is being tested rather than how to setup the test scenario, by making it easier to create object graphs containing test data.

License: MIT License

C# 98.84% F# 1.13% Batchfile 0.02% Pascal 0.01%

autofixture's Introduction

Build status NuGet version AutoFixture

Project Description

Write maintainable unit tests, faster.

AutoFixture makes it easier for developers to do Test-Driven Development by automating non-relevant Test Fixture Setup, allowing the Test Developer to focus on the essentials of each test case.

"saved us quite some time"

-Florian Hötzinger, GAB Enterprise IT Solutions GmbH

Overview

(Jump straight to the CheatSheet if you just want to see some code samples right away.)

AutoFixture is designed to make Test-Driven Development more productive and unit tests more refactoring-safe. It does so by removing the need for hand-coding anonymous variables as part of a test's Fixture Setup phase. Among other features, it offers a generic implementation of the Test Data Builder pattern.

When writing unit tests, you typically need to create some objects that represent the initial state of the test. Often, an API will force you to specify much more data than you really care about, so you frequently end up creating objects that has no influence on the test, simply to make the code compile.

AutoFixture can help by creating such Anonymous Variables for you. Here's a simple example:

[Fact]
public void IntroductoryTest()
{
    // Arrange
    Fixture fixture = new Fixture();

    int expectedNumber = fixture.Create<int>();
    MyClass sut = fixture.Create<MyClass>();
    // Act
    int result = sut.Echo(expectedNumber);
    // Assert
    Assert.Equal(expectedNumber, result);
}

This example illustrates the basic principle of AutoFixture: It can create values of virtually any type without the need for you to explicitly define which values should be used. The number expectedNumber is created by a call to Create - this will create a 'nice', regular integer value, saving you the effort of explicitly coming up with one.

The example also illustrates how AutoFixture can be used as a SUT Factory that creates the actual System Under Test (the MyClass instance).

Given the right combination of unit testing framework and extensions for AutoFixture, we can further reduce the above test to be even more declarative:

xUnit

[Theory, AutoData]
public void IntroductoryTest(
    int expectedNumber, MyClass sut)
{
    int result = sut.Echo(expectedNumber);
    Assert.Equal(expectedNumber, result);
}

and

NUnit

[Test, AutoData]
public void IntroductoryTest(
    int expectedNumber, MyClass sut)
{
    int result = sut.Echo(expectedNumber);
    Assert.Equal(expectedNumber, result);
}

Notice how we can reduce unit tests to state only the relevant parts of the test. The rest (variables, Fixture object) is relegated to attributes and parameter values that are supplied automatically by AutoFixture. The test is now only two lines of code.

Using AutoFixture is as easy as referencing the library and creating a new instance of the Fixture class!

.NET platforms compatibility table

Product .NET Framework .NET Standard
AutoFixture ✔️ 4.5.2 ✔️ 1.5, 2.0
AutoFixture.SeedExtensions ✔️ 4.5.2 ✔️ 1.5, 2.0
AutoFixture.xUnit ✔️ 4.5.2
AutoFixture.xUnit2 ✔️ 4.5.2 ✔️ 1.5, 2.0
AutoFixture.NUnit2 ✔️ 4.5.2
AutoFixture.NUnit3 ✔️ 4.5.2 ✔️ 1.5, 2.0
AutoFakeItEasy ✔️ 4.5.2 ✔️ 1.6, 2.0
AutoFoq ✔️ 4.5.2 ✔️ 2.0
AutoMoq ✔️ 4.5.2 ✔️ 1.5, 2.0
AutoNSubstitute ✔️ 4.5.2 ✔️ 1.5, 2.0
AutoRhinoMock ✔️ 4.5.2
Idioms ✔️ 4.5.2 ✔️ 2.0
Idioms.FsCheck ✔️ 4.5.2 ✔️ 2.0

Downloads

AutoFixture is available via NuGet:

vNext feed

The artifacts of the next major version are published to the MyGet feed:

  • https://www.myget.org/F/autofixture/api/v3/index.json (Visual Studio 2015+)
  • https://www.myget.org/F/autofixture/api/v2 (Visual Studio 2012+)

You can use this feed to early access and test the next major version of the AutoFixture.

Notice, this feed exists for the preview purpose only, so use it with caution:

  • new versions of packages might contain breaking changes and API could change drastically from package to package. By other words, we don't follow the SemVer policy for the packages in this feed;
  • packages might be cleaned up over time (MyGet has storage limits), so don't consider this feed for the permanent usage (or at least ensure to make a copy of the used packages somewhere else).

Versioning

AutoFixture follows Semantic Versioning 2.0.0 for the public releases (published to the nuget.org).

Build

AutoFixture uses FAKE as a build engine. If you would like to build the AutoFixture locally, run the build.cmd file and wait for the result.

The repository state (the last tag name and number of commits since the last tag) is used to determine the build version. If you would like to override the auto-generated AutoFixture version, set the BUILD_VERSION environment variable before calling the build.cmd file. Example for PowerShell:

$env:BUILD_VERSION='3.52.0'; .\build.cmd

Refer to the Build.fsx file to get information about all the supported build keys.

Documentation

Questions

If you have questions, feel free to ask. The best places to ask are:

Who uses AutoFixture?

AutoFixture is used around the world, as the following quotes testify:

"I’ve introduced AutoFixture to my developers (at www.gab.de ) some time ago. We’ve been using it successfully with xunit in multiple projects all across the .NET technology stack. We also use it for feeding dummy data to the UI when developing prototypes. That saved us quite some time.

-Florian Hötzinger, GAB Enterprise IT Solutions GmbH

"I have used AutoFixture for 3 years, it's a vital tool in my TDD toolbox, a real time-saver. Setting up maintainable and robust unit tests with AutoFixture is easy and straightforward - highly recommendable"

-Mads Tjørnelund Toustrup, Senior .Net Developer, d60 a/s

"Autofixture is more than just another test data generator. It helps me to write tests faster, which are robust against changes in my production code. Moreover, with Autofixture I can focus the tests on the behavior I want to check which why they are easier to read and understand."

-Hendrik Lösch, Saxonia Systems AG

If you want to add your own testimonial to this list, we (the AutoFixture maintainers) would be very grateful. Send us a pull request to this README.md file.

Additional resources

autofixture's People

Contributors

adamchester avatar alexfoxgill avatar blairconrad avatar cloggins-pcty avatar dcastro avatar dlongest avatar ecampidoglio avatar erikschierboom avatar gertjvr avatar hackle avatar holstebroe avatar jwchung avatar markwoodhall avatar martin-bohring avatar micheleissa avatar moodmosaic avatar mrinaldi avatar olegsych avatar peter-raven avatar ploeh avatar pvlerick avatar sbv-csis avatar sean-gilliam avatar seanfarrow avatar sgryt avatar sshushliapin avatar teadrivendev avatar tiesmaster avatar wojcikmike avatar zvirja avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.