Tôi cảm thấy như tôi đang thiếu một cái gì đó thực sự rõ ràng ở đây. Tôi có các lớp yêu cầu tiêm các tùy chọn bằng cách sử dụng mẫu .Net Core IOptions (?). Khi tôi đi kiểm tra đơn vị lớp đó, tôi muốn mô phỏng các phiên bản khác nhau của các tùy chọn để xác thực chức năng của lớp. Có ai biết làm thế nào để mô phỏng / khởi tạo / điền chính xác các IOptions bên ngoài lớp Startup không?
Dưới đây là một số mẫu của các lớp tôi đang làm việc với:
Cài đặt / Mô hình tùy chọn
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; }
}
}
Lớp được kiểm tra sử dụng Cài đặt:
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()
{
}
}
}
Kiểm tra đơn vị trong một hội đồng khác với các lớp khác:
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>
bạn chỉ phải chế giễu Value
để trở lại lớp học mà bạn mong muốn