Skip to content

Instantly share code, notes, and snippets.

View StacyGay's full-sized avatar

Stacy Gay StacyGay

View GitHub Profile
@StacyGay
StacyGay / UnityDiVNextStartup3.cs
Created April 11, 2021 20:37
Unity DI VNext Startup 3
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddMvc();
var container = new UnityContainer();
container.Populate(services);
container.Resolve<IScopedInstance<ActionContext>>();
return container.Resolve<IServiceProvider>();
}
@StacyGay
StacyGay / UnityDiVNextRegistration.cs
Last active April 11, 2021 20:35
Unity DI VNext - Unity Registration
public static class UnityRegistration
{
public static void Populate(this IUnityContainer container,
IServiceCollection services)
{
container.AddExtension(new EnumerableResolutionExtension());
container.RegisterInstance(services);
container.RegisterType<IServiceProvider, UnityServiceProvider>();
container.RegisterType<IServiceScopeFactory, UnityServiceScopeFactory>();
@StacyGay
StacyGay / UnityDiVNextUnityServiceProvider.cs
Created April 11, 2021 20:34
Unity DI VNext - UnityServiceProvider
public class UnityServiceScope : IServiceScope
{
private readonly IUnityContainer _container;
public IServiceProvider ServiceProvider { get; }
public UnityServiceScope(IUnityContainer container)
{
_container = container;
ServiceProvider = _container.Resolve<IServiceProvider>();
}
@StacyGay
StacyGay / UnityDiVNextStartup2.cs
Created April 11, 2021 20:32
Unity DI VNext Startup 2
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddMvc();
var container = new UnityContainer();
container.Populate(services);
return container.Resolve<IServiceProvider>();
}
@StacyGay
StacyGay / UnityDiVNextStartup.cs
Created April 11, 2021 20:30
Unity DI VNext Startup
public class Startup
{
// This method gets called by a runtime. Use this method to add services to the container
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddTransient<ITransientService, TransientService>();
services.AddScoped<IScopedService, ScopedService>();
services.AddSingleton<ISingletonService, SingletonService>();
}
@StacyGay
StacyGay / TrinityTestExample2.cs
Created April 11, 2021 20:11
Trinity of test - Example 2
using Ploeh.AutoFixture;
using Ploeh.AutoFixture.AutoMoq;
using Ploeh.AutoFixture.Xunit;
namespace MyTestingSuite
{
public class AutoMoqDataAttribute : AutoDataAttribute
{
public AutoMoqDataAttribute()
: base(new Fixture().Customize(new AutoMoqCustomization()))
@StacyGay
StacyGay / TrinityTestExample1.cs
Created April 11, 2021 20:10
Trinity of test example 1
[Theory, AutoMoqData]
public void Should_Throw_On_Invalid_Email([Frozen] Mock<IProductRepo> productRepo,
Product product, Customer customer, TransactionService testTransactionService)
{
customer.Email = "Not an email address";
productRepo.setup(repo => repo.GetProduct(It.Is<int>(product.id)).Returns(product);
Assert.Throws(() => testTransactionService.Sell(product.Id,customer));
}
@StacyGay
StacyGay / TrinityTestAutoFixture.cs
Created April 11, 2021 20:08
Trinity of test - AutoFixture
var fixture = new Fixture();
var someString = fixture.Create<string>();
Console.WriteLine(someString);
// 30a35da1-d681-441b-9db3-77ff51728b58
var generatedPerson = fixture.Create<Person>();
Console.WriteLine(generatedPerson.Name);
// namef5cdf6b1-a473-410f-95f3-f427f7abb0c7
@StacyGay
StacyGay / TrinityTestXUnit.cs
Last active April 11, 2021 20:05
Trinity of test - XUnit
[Theory]
[InlineData(2)]
[InlineData(0)]
[InlineData(-1)]
public void Should_Correctly_Detect_Negative(int value)
{
var service = new NegativeService();
if(value < 0)
Assert.True(service.IsNegative(value));
else
@StacyGay
StacyGay / TrinityTestMoq.cs
Created April 11, 2021 20:03
Trinity of test - Moq
[Fact]
public void Basic_Unit_Test()
{
var mockRepo = new Mock<IMyRepo>();
mockRepo.Setup(foo => foo.GetSomething(It.IsAny<int>())).Returns("Something");
var serviceUnderTest = new MyUpperService(mockRepo);
var result = serviceUnderTest.MakeUpper();
Assert.Equal("SOMETHING",result);
}