성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Reordering on an Alpha processor ;...
[정성태] 공유 감사합니다. ^^ 참고로, WPF에서 WindowsF...
[Tom Lee] 답변 감사합니다. 나름의 해결책 연구해보고 여기에도 공유해봅니다...
[정성태] 아래의 글을 보면, MoveWindow 하면 될 듯한데요. ^^...
[Tom Lee] 안녕하세요 올려주신 글 참고하여 WPF 어플리케이션 안에 Uni...
[정성태] A graphical depiction of the steps ...
[정성태] 질문을 주셔서 출판사 측에 문의를 했습니다. 약 한 달 정도 후...
[Thorondor
] @정성태 개인 블로그인데도 거의 커뮤니티 급 인 것 같아요. 요...
[정성태] Roll A Lisp In C - Reading ; https...
[정성태] Java - How to use the Foreign Funct...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>C# - .NET Core/5+ 환경에서 Fakes를 이용한 단위 테스트 방법</h1> <p> 예전에 .NET Framework 환경에서만 하다가,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Visual Studio의 단위 테스트 작성 시 Fakes를 이용한 메서드 재정의 방법 ; <a target='tab' href='https://www.sysnet.pe.kr/2/0/10858'>https://www.sysnet.pe.kr/2/0/10858</a> </pre> <br /> .NET core/5+ 환경으로 오면서는 해본 적이 없어 이참에 한번 해봤습니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 우선, .NET 6 라이브러리 프로젝트를 만들고, 테스트를 위해 Microsoft.Data.SqlClient 패키지를 참조한 다음,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Install-Package Microsoft.Data.SqlClient </pre> <br /> 이렇게 코드를 추가합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > using Microsoft.Data.SqlClient; namespace ClassLibrary1 { public class Class1 { public void Test() { SqlConnection sqlCon = new SqlConnection(); sqlCon.ConnectionString = "test"; sqlCon.Open(); } } } </pre> <br /> 당연히 위의 코드는 연결 문자열이 잘못되었으므로 그냥 실행하면 예외가 발생합니다. 자, 그럼 이 상태에서 Test 메서드를 우클릭해 단위 테스트를 만들고,<br /> <br /> <img alt='net6_fake_1.png' src='/SysWebRes/bbs/net6_fake_1.png' /><br /> <br /> 이로 인해 생성한 ClassLibrary1Tests 프로젝트의 "Dependencies" 하위에서 Microsoft.Data.SqlClient.dll에 대해 "Add Fakes Assembly" 메뉴를 선택합니다.<br /> <br /> <img alt='net6_fake_2.png' src='/SysWebRes/bbs/net6_fake_2.png' /><br /> <br /> 그럼 다음과 같이 "Fakes" 디렉터리가 생기고 "Microsoft.Data.SqlClient.fakes" 항목이 생깁니다.<br /> <br /> <img alt='net6_fake_3.png' src='/SysWebRes/bbs/net6_fake_3.png' /><br /> <br /> Microsoft.Data.SqlClient.fakes 파일을 열어보면 단순 텍스트 파일이고 여기서 <a target='tab' href='https://www.sysnet.pe.kr/2/0/11150'>좀 더 상세한 제어를 추가</a>할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > <Fakes xmlns="http://schemas.microsoft.com/fakes/2011/"> <Assembly Name="Microsoft.Data.SqlClient" Version="5.0.0.0"/> </Fakes> </pre> <br /> 환경 설정은 이걸로 끝입니다, 남은 작업은 Shim을 이용해 테스트를 작성하기만 하면 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > using Microsoft.Data.SqlClient.Fakes; using Microsoft.QualityTools.Testing.Fakes; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace ClassLibrary1.Tests { [TestClass()] public class Class1Tests { [TestMethod()] public void TestTest() { <span style='color: blue; font-weight: bold'>using (ShimsContext.Create()) { ShimSqlConnection.AllInstances.Open = (thisInstance) => Console.WriteLine("Open"); Class1 class1 = new Class1(); class1.Test(); }</span> } } } </pre> <br /> 원래 코드에서는 ConnectionString에 "test" 연결 문자열을 줬기 때문에 예외가 발생해야 하지만, 위의 ShimsContext 내에서 실행하는 SqlConnection.Open은 Console.WriteLine 코드만 수행하므로 아무런 예외 없이 테스트 통과를 하게 됩니다.<br /> <br /> <img alt='net6_fake_4.png' src='/SysWebRes/bbs/net6_fake_4.png' /><br /> <br /> .NET Framework 시절과 비교해 딱히 바뀐 것은 없고, 단지 Fake 해야 할 어셈블리를 찾기 위해 Dependencies를 헤매야 하는 불편함 정도만 있습니다.<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
3780
(왼쪽의 숫자를 입력해야 합니다.)