
A unit test generation extension for Visual Studio that aims to always produce code that compiles - covering the basic cases automatically and preparing as much as it can for the complex cases.
Get the extension from the Visual Studio Marketplace:
Alternatively see the releases on GitHub:
Demonstrates how constructor dependencies can be configured using AutoFixture, and mock configuration calls can still be generated
public interface IDummyService
{
    string SomeProp { get; set; }
    void NoReturnMethod();
    int ReturnMethod();
    T GenericMethod<T>(T val);
    Task<string> AsyncMethod();
}
public interface IDummyService2
{
    string SomeProp { get; }
    void NoReturnMethod(string s);
    int ReturnMethod(string s);
    int ReturnMethod(string s, string s2);
    int ReturnMethod(string s, object o);
    Task<string> AsyncMethod(string s);
}
public static class DummyExt
{
    public static int ReturnMethod(this IDummyService2 d, string s, string s2, string s3)
    {
        return 0;
    }
}
public class AutomaticMockGenerationExample
{
    private IDummyService _dummyService, _otherDummyService;
    private IDummyService2 _dummyService2;
    private int _someIntField;
    public AutomaticMockGenerationExample(IDummyService dummyService, IDummyService2 dummyService2)
    {
        _dummyService = dummyService ?? throw new System.ArgumentNullException(nameof(dummyService));
        _dummyService2 = dummyService2;
        _someIntField = dummyService.ReturnMethod();
        dummyService = null;
    }
    public async Task SampleAsyncMethod()
    {
        await _dummyService.AsyncMethod();
        await _dummyService2.AsyncMethod("foo");
    }
    public void SampleNoReturn(string srr)
    {
        _dummyService.NoReturnMethod();
        _dummyService.NoReturnMethod();
        _dummyService.NoReturnMethod();
        var s = _dummyService.GenericMethod(srr);
        _dummyService.SomeProp += _dummyService2.SomeProp;
        var value = _dummyService2.ReturnMethod("sds", "s");
        var value2 = _dummyService2.ReturnMethod("sds", "s", "s3");
    }
}
public class AutomaticMockGenerationExampleTests
{
    private readonly AutomaticMockGenerationExample _testClass;
    private readonly IDummyService _dummyService;
    private readonly IDummyService2 _dummyService2;
    public AutomaticMockGenerationExampleTests()
    {
        var fixture = new Fixture().Customize(new AutoNSubstituteCustomization());
        _dummyService = fixture.Freeze<IDummyService>();
        _dummyService2 = fixture.Freeze<IDummyService2>();
        _testClass = fixture.Create<AutomaticMockGenerationExample>();
    }
    [Fact]
    public void CanConstruct()
    {
        // Act
        var instance = new AutomaticMockGenerationExample(_dummyService, _dummyService2);
        // Assert
        instance.Should().NotBeNull();
    }
    [Fact]
    public void CannotConstructWithNullDummyService()
    {
        FluentActions.Invoking(() => new AutomaticMockGenerationExample(default(IDummyService), _dummyService2)).Should().Throw<ArgumentNullException>().WithParameterName("dummyService");
    }
    [Fact]
    public void CannotConstructWithNullDummyService2()
    {
        FluentActions.Invoking(() => new AutomaticMockGenerationExample(_dummyService, default(IDummyService2))).Should().Throw<ArgumentNullException>().WithParameterName("dummyService2");
    }
    [Fact]
    public async Task CanCallSampleAsyncMethod()
    {
        // Arrange
        var fixture = new Fixture().Customize(new AutoNSubstituteCustomization());
        _dummyService.AsyncMethod().Returns(fixture.Create<string>());
        _dummyService2.AsyncMethod(Arg.Any<string>()).Returns(fixture.Create<string>());
        // Act
        await _testClass.SampleAsyncMethod();
        // Assert
        await _dummyService.Received().AsyncMethod();
        await _dummyService2.Received().AsyncMethod(Arg.Any<string>());
        throw new NotImplementedException("Create or modify test");
    }
    [Fact]
    public void CanCallSampleNoReturn()
    {
        // Arrange
        var fixture = new Fixture().Customize(new AutoNSubstituteCustomization());
        var srr = fixture.Create<string>();
        _dummyService.GenericMethod<string>(Arg.Any<string>()).Returns(fixture.Create<string>());
        _dummyService2.ReturnMethod(Arg.Any<string>(), Arg.Any<string>()).Returns(fixture.Create<int>());
        _dummyService2.SomeProp.Returns(fixture.Create<string>());
        // Act
        _testClass.SampleNoReturn(srr);
        // Assert
        _dummyService.Received().NoReturnMethod();
        _dummyService.Received().GenericMethod<string>(Arg.Any<string>());
        _dummyService2.Received().ReturnMethod(Arg.Any<string>(), Arg.Any<string>());
        throw new NotImplementedException("Create or modify test");
    }
    [Theory]
    [InlineData(null)]
    [InlineData("")]
    [InlineData("   ")]
    public void CannotCallSampleNoReturnWithInvalidSrr(string value)
    {
        FluentActions.Invoking(() => _testClass.SampleNoReturn(value)).Should().Throw<ArgumentNullException>().WithParameterName("srr");
    }
}