Ich fühle mich, als würde ich etwas wirklich offensichtlich hier vermissen. Ich habe Klassen, die das Injizieren von Optionen erfordern, die das .Net Core IOptions-Muster (?) Verwenden. Wenn ich zum Komponententest gehe, möchte ich verschiedene Versionen der Optionen vortäuschen, um die Funktionalität der Klasse zu überprüfen. Kann jemand IOptionen außerhalb der Startup-Klasse korrekt nachahmen/instanziieren/auffüllen?.Net Core Unit Testing - Mock IOptionen <T>
Hier einige Beispiele der Klassen sind mit arbeite ich:
Einstellungen/Optionen Modell
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace OptionsSample.Models
{
public class SampleOptions
{
public string FirstSetting { get; set; }
public int SecondSetting { get; set; }
}
}
Klasse getestet werden, welche die Einstellungen verwendet:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using OptionsSample.Models
using System.Net.Http;
using Microsoft.Extensions.Options;
using System.IO;
using Microsoft.AspNetCore.Http;
using System.Xml.Linq;
using Newtonsoft.Json;
using System.Dynamic;
using Microsoft.Extensions.Logging;
namespace OptionsSample.Repositories
{
public class SampleRepo : ISampleRepo
{
private SampleOptions _options;
private ILogger<AzureStorageQueuePassthru> _logger;
public SampleRepo(IOptions<SampleOptions> options)
{
_options = options.Value;
}
public async Task Get()
{
}
}
}
Unit-Test in einer anderen Baugruppe als die anderen Klassen:
using OptionsSample.Repositories;
using OptionsSample.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Xunit;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;
namespace OptionsSample.Repositories.Tests
{
public class SampleRepoTests
{
private IOptions<SampleOptions> _options;
private SampleRepo _sampleRepo;
public SampleRepoTests()
{
//Not sure how to populate IOptions<SampleOptions> here
_options = options;
_sampleRepo = new SampleRepo(_options);
}
}
}
Könnten Sie einen kleinen Codebeispiel des Blocks Sie zu verspotten versuchen? Vielen Dank! – axlj
Verwechseln Sie die Bedeutung von Spott? Sie verspotten eine Schnittstelle und konfigurieren sie so, dass sie einen bestimmten Wert zurückgibt. Für 'IOptions' müssen Sie nur 'Value' verspotten, um die Klasse zurückzugeben, die Sie wünschen –
Tseng