2022. 9. 2. 00:00ㆍMAUI
MAUI 에서도 일반 적인 .net app 들과 같이 UnitTest 가 가능 하다.
이번 시간에는 MAUI Project 에 Xunit 을 추가하여 UnitTest 를 실행하는 방법을 알아보겠다.
Solution --> add --> new project --> xUnit Test Project 선택 --> Next
Create
그럼 다음과 같이 project 가 생성되고 기본적인 파일이 만들어 진다.
UnitTest1.cs 를 삭제 하고 ViewModelTest.cs 를 추가 하자
(또는 Rename 하여 사용해도 된다.)
이제 Test 하려는 Project 를 참조한다.
UnitTest --> Dependencies --> Add Project Reference..
하지만 이제 Buid 해보면 아래와 같은 오류가 난다.
아 정말!!.. 이러면서 꺼버리고 싶을 수 있다.
자 !! 진정하자... 이제 왜 이런 일이 일어났는지 알아보고 수정해 보겠다.
우리가 지금 Test 하려는 MauiApp1 프로젝트로 가서 edit project file 을 해보자
그리고 TargetFrameworks 를 확인하자
이제 우리 UnitTest 프로젝트로 이동해서 edit project file 을 해보자
그리고 TargetFrameworks 를 확인하자
오잉!!! 이게 무슨일!!!???
이제 에러메세지를 다시 확인해 보자
Error NU1201 Project MauiApp1 is not compatible with net6.0 (.NETCoreApp,Version=v6.0). Project MauiApp1 supports:
- net6.0-android31.0 (.NETCoreApp,Version=v6.0)
- net6.0-ios15.4 (.NETCoreApp,Version=v6.0)
- net6.0-maccatalyst15.4 (.NETCoreApp,Version=v6.0)
- net6.0-windows10.0.19041 (.NETCoreApp,Version=v6.0) UnitTest
Error Project '..\MauiApp1\MauiApp1.csproj' targets 'net6.0-android;net6.0-ios;net6.0-maccatalyst;net6.0-windows10.0.19041.0'. It cannot be referenced by a project that targets '.NETCoreApp,Version=v6.0'.
이제 대충 이해가 되었을 것이다.
즉 error 내용은 MauiApp1 project 는 net6.0 을 지원하지 않고 우리 UnitTest project 는 net6.0 으로 만들어 졌다는 것이다.
UnitTest project 에 다른 모든 frameworks 를 넣을 수는 없다. (MAUI 는 좀 특수한 형태이다)
그렇다면 역발상을 해보자.
UnitTest 가 안된다면 MauiApp1 에 net6.0 을 지원하도록 해보자. (오옷!! 유레카!!)
뭐 하나쯤 더 추가한다고 무슨일이 일어나겠나?
MauiApp1.csproj
그리고 아래쪽을 보면 <OutputType>Exe</OutputType> 을 볼수 있다.
생각해 보건데 ios,mac,android,tizen 등의 net framework 가 exe 를 통해 처리되도록 되어있다고 생각된다.
(물론 아닐 수도 있다. )
그래서 내 생각엔 저 output type 에 condition 을 주어서 net6.0 이 아닐때만 exe 를 생성하게 하는게 좋을것 같다.
아래와 같이 변경하자
<OutputType Condition="'$(TargetFramework)' != 'net6.0'">Exe</OutputType>
자 이제 도전해 보자 rebuild 시간이다!!
rebuild 후 View --> Test Explorer 를 누르자
Test Explorer 에서 Test 를 Run 및 Debug 해보자
** 혹시 build 는 되었는데 실행하면 alert 창이 뜨면서 build 할수 없다고 하고 이전 build 를 가지고 처리 하겠다는 메세지가 나오는가? 그렇다면 visual studio 를 종료 후 다시 실행하자.... 버그다... 젠 ㅡ,.ㅡ 장 **
자 종류 후 실행 하기 전에
다음 과 같이 코드를 실행 해보자 (view model 아무거나 하나 가지고 해도 된다. )
ViewModelTest.cs
using MauiApp1.MVVM.AutoScan;
using Xunit.Abstractions;
using Xunit.Sdk;
namespace UnitTest;
public class ViewModelTest
{
private readonly ITestOutputHelper _testOutputHelper;
public ViewModelTest(ITestOutputHelper testOutputHelper)
{
_testOutputHelper = testOutputHelper;
}
[Fact]
public void Test1()
{
//Assert.False(true);
IHelloWorldClass helloWorldClass = new HelloWorldClass();
var viewModel = new IncrementCounterViewModel(helloWorldClass);
Assert.False(!string.IsNullOrEmpty(viewModel.Message));
viewModel.ChangeMessageCommand.Execute(null);
_testOutputHelper.WriteLine(viewModel.Message);
Assert.True(!string.IsNullOrEmpty(viewModel.Message));
}
}
자 이제 happy coding!!
UnitTest 이후에는 원상태로 MauiApp1 project 를 돌려주자. run 이 안된다... 아 젠장!!
그리고 visual studio 를 다시 실행하자 .. 하.. 정말!! 버그가 아직 많다!!
관련영상
'MAUI' 카테고리의 다른 글
.NET MAUI - MediatR 을 이용한 Event Mechanism 구현 (0) | 2022.09.01 |
---|---|
.NET MAUI - HttpClient 를 이용한 Rest Api 호출 (0) | 2022.08.31 |
.NET MAUI - Configuration 을 이용한 json 파일 제어 (0) | 2022.08.30 |
.NET MAUI - CommunityToolkit.Maui 유용한 Behavior 3 (0) | 2022.08.26 |
.NET MAUI - CommunityToolkit.Maui 유용한 Behavior 2 (0) | 2022.08.25 |