Saya merasa seperti kehilangan sesuatu yang sangat jelas di sini. Saya memiliki kelas yang memerlukan injeksi opsi menggunakan pola Net. IOptions (?). Ketika saya pergi ke unit test kelas itu, saya ingin mengejek berbagai versi opsi untuk memvalidasi fungsionalitas kelas. Adakah yang tahu bagaimana cara mengejek / instantiate / mengisi IOptions dengan benar di luar kelas Startup?
Berikut adalah beberapa contoh kelas yang saya kerjakan:
Pengaturan / Opsi Model
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; }
}
}
Kelas yang akan diuji yang menggunakan Pengaturan:
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()
{
}
}
}
Tes unit dalam majelis berbeda dari kelas lain:
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);
}
}
}
IOptions<T>
kamu hanya perlu mengejek Value
untuk mengembalikan kelas yang kamu inginkan