2017-11-25 13 views
0

私はWebApiをCore.net 2.0で実行しましたが、UOWとautomapperを使用しています。 すべてが正常に動作しているが、今私はNUnitのでユニットテストを実施したい、と私はautomapperユニットテストでエラーが発生しました。ユニットテストでエラーが発生しました。Core.Net 2.0

メッセージのこのエラーがあります:System.InvalidOperationExceptionが:マッパー初期化されていませんが。 適切な構成で初期化を呼び出します。 コンテナなどを使用してマッパーインスタンスを使用する場合は、 には静的なMapper.Mapメソッドが呼び出されていないことを確認してください。 ProjectToメソッドまたはUseAsDataSource拡張メソッドを使用している場合は、 適切なIConfigurationProviderインスタンスに追加します。

これをどのように解決できますか。前もって感謝します 。 Jolynice

クラスAutoMapperProfile.cs

public class AutoMapperProfile : Profile 
{ 
    public AutoMapperProfile() 
    { 
     CreateMap<Cars, CarsDTO>() 
      .ReverseMap(); 
    } 
} 

クラスStartup.cs

public class Startup 
{ 
    public IConfiguration Configuration { get; } 

    public Startup(IConfiguration configuration) 
    { 
     Configuration = configuration; 
    } 
    public void ConfigureServices(IServiceCollection services) 
    { 

     //removed configurations 

     // Add cors 
     services.AddCors(); 

     // Add framework services. 
     services.AddMvc(); 

     Mapper.Initialize(cfg => 
     { 
      cfg.AddProfile<AutoMapperProfile>(); 
     }); 

     // Repositories 
     services.AddScoped<IUnitOfWork, HttpUnitOfWork>(); 
     services.AddScoped<IAccountManager, AccountManager>(); 
    } 
} 

クラスcarsController.cs

[Authorize] 
[Route("api/[controller]")] 
public class CarsController : Controller 
{ 
private IUnitOfWork _unitOfWork; 
readonly ILogger _logger; 
private readonly IAccountManager _accountManager; 

public CarsController(
    IUnitOfWork unitOfWork, 
    ILogger<CarsController> logger, 
    IAccountManager accountManager) 
{ 
    _unitOfWork = unitOfWork; 
    _logger = logger; 
    _accountManager = accountManager; 
} 


[HttpGet] 
public IActionResult GetAll() 
{ 
    var allCars = _unitOfWork.CarsRepository.GetAllCarsData(); 
    if (allCars == null) 
    { 
     return NotFound(); 
    } 
    return Ok(Mapper.Map<IEnumerable<CarsDTO>>(allCars)); 
} 

、これは私のユニットテスト

[TestFixture] 
public class CarsControllerTest 
{ 
#region private variables 
List<Cars> cars = new List<Cars>(); 

CarsController _carsController = null; 
IUnitOfWork _unitOfWork; 
ICarsRepository _carsRepository; 
#endregion 


[SetUp] 
public void SetUp() 
{ 
    cars = new List<Cars> 
    { 
    new Cars 
    { 
     Alias = "406Moq", 
     BrandId = 1, 
     ModelId = 1, 
     Plate = "00-00-01", 
     AltranVehicle = 0, 
     DefaultCar = 0, 
     Active = 1, 
     ColorId = 1 
    } 
    }; 
} 


[Test] 
public void GetAllCarsControllerTest() 
{ 
    //Arrange 
    _carsRepository = SetupCarsRepository(); 
    var unityOfWork = new Mock<IUnitOfWork>(); 
    var _logger = new Mock<ILogger<CarsController>>(); 
    var accountManager = new Mock<IAccountManager>(); 

    unityOfWork.SetupGet(c => c.CarsRepository).Returns(_carsRepository); 
    _unitOfWork = unityOfWork.Object; 

    _carsController = new CarsController(_unitOfWork, _logger.Object, accountManager.Object); 


    //Act 
    var carsResult = _carsController.GetAll(); 

    //Assert 
    carsResult.StatusCode.Should().Be(HttpStatusCode.OK); 
} 

private ICarsRepository SetupCarsRepository() 
{ 
    //initialize repository 
    var mockRepo = new Mock<ICarsRepository>(MockBehavior.Default); 

    //Setup mocking behavior 
    mockRepo.Setup(c => c.GetAllCarsData()).Returns(cars); 

    return mockRepo.Object; 
} 

//Cleanup 
[TearDown] 
public void TearDown() 
{ 
    cars = null; 
} 
} 
} 
+0

dotnet core 2.0の代わりに 'Mapper.Initialize'の代わりに' services.AddAutoMapper(typeof(Startup)) 'があります。私たちのプロファイルクラスは 'MapperConfigurationExpression'を継承しています。 – Boggin

+0

こんにちはボギーン、私はそれを試してみます。ありがとうございました – jolynice

答えて

5

ユニットテストでマッパーの初期化がありません。以下は、CarsControllerTestクラスのコンストラクタでマッパーを初期化します。

[TestFixture] 
    public class CarsControllerTest 
    { 
      public CarsControllerTest() 
      { 
       Mapper.Initialize(cfg => 
       { 
        cfg.AddProfile<AutoMapperProfile>(); 
       }); 
      } 
    } 
+0

CK R、ありがとうございました、私は忘れました、そして今はうまくいきます。素敵な一日を過ごしてください:) – jolynice

+0

うれしい私は助けることができます。投票を忘れないでください。 –

+0

あなたは受け入れられた回答をロールバックしましたか? –

関連する問題