.NET MAUI - Xunit 을 이용한 UnitTest

2022. 9. 2. 00:00MAUI

반응형

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..

MauiApp1 을 선택하고 OK 버튼 클릭

하지만 이제 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

MauiApp1.csproj 에 net6.0 을 추가하자

그리고 아래쪽을 보면 <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 를 다시 실행하자 .. 하.. 정말!! 버그가 아직 많다!! 

 

관련영상

https://youtu.be/srZJeO0p4XI

 

 

반응형