私はConfigureServices()
機能でこのnunit dotnet core testプロジェクトでappsettingsを使用するには?
Startup.cs
services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
Controller.cs
private readonly AppSettings _AppSettings;
public UserProfilesController(IOptions<AppSettings> appSettings)
{
_AppSettings = appSettings.Value;
}
しかし、私のようなappsettings.json
ファイルから私のAPIプロジェクトでのAppSettingsを追加することができました私のテストプロジェクトでこれをどうやって行うのか分かりません。テストプロジェクトにはStartup.ts
がありません。どうすれば私のテストプロジェクトに同じ方法でappsettingsを追加できますか?
EDIT:
一つNUnitのテスト
[Test]
public void Post_Should_Create_A_Single_UserProfile()
{
// Arrange
var profile = Dummy.GenerateCreateUserProfileDto();
MyMvc
.Controller<UserProfilesController>()
.Calling(c => c.Post(profile))
.ShouldReturn()
.Ok()
.WithResponseModelOfType<UserProfileDto>()
.Passing(target =>
{
target.Should().NotBeNull(because: "a record is expected here");
target.Id.Should().BeGreaterThan(0, because: "a id is expected");
target.ShouldBeEquivalentTo(profile, opt => opt
.Excluding(c => c.Id)
.Excluding(c => c.CreatedOn)
.Excluding(c => c.ModifiedOn),
because: "the record returned is expected to be the same as the record inserted");
// Clean up
_Repo.Delete(target.Id);
});
}
私のポスト機能
[HttpPost]
public async Task<IActionResult> Post([FromBody]CreateUserProfileDto profile)
{
using (var fileManager = new FileManager())
using (var manager = new UserProfilesRepository())
{
var mapped = Mapper.Map<UserProfile>(profile);
// Only save the profile image if one is selected
if (!string.IsNullOrEmpty(profile.Image))
{
try
{
var result = fileManager.SaveProfileImage(
profile.Image,
_AppSettings.Profile.AbsolutePath,
_AppSettings.BaseUrl,
_AppSettings.Profile.RelativePath
);
mapped.FilePath = result.AbsolutePath;
mapped.ProfilePicture = result.RelativePath;
}
catch (Exception ex)
{
return StatusCode(500);
}
}
manager.Save(mapped);
return Ok(Mapper.Map<UserProfileDto>(mapped));
}
}
は、ユニットテストのコードを表示します。単体テストでIOptionsインターフェイスを簡単にモックすることもできます。 – Nkosi
@ Nkosi私は、nsetを使用するコントローラにnunitテストとポストコードのいずれかを掲示しました。 –
このNunitをアプリケーションの一部として使用しているのですか、それとも別のプロジェクトですか? –