목록전체보기 (71)
HaPpY hApPy
이번엔 Exception이 발생해야 통과하는 테스트를 만들어보자. 이제 코드만 보면 대충 뭔지 알껏이다. 먼저 CFileExtension 클래스에 함수 하나를 추가한다. public bool IsValidFileName(string fileName) { if (string.IsNullOrEmpty(fileName)) // "" 혹은 null 이면 { throw new ArgumentException("WronFileName Exception"); //예외 발생, "WronFileName Exception" 을 예외 정보로 날림 } return true; } 그리고 CFileExtensionTester 클래스에 아래 함수를 추가한다. [Test] public void IsVaildFileName_Empty..
ㅠ-ㅠ 공부하는 시간보다 여기 정리하는데 시간이 5배는 걸린다..--; 앞으로 간단히 해야겠답! 이전에는 메소드 위에 [Test] Attribute를 이용해봤다. 하지만 생각해 볼 문제가 있다. 만약 FilePath를 테스트 할 때 아래와 같이 3개의 파일을 테스트 하게 될 경우 "SomeFile1.BUG", //BUG 대문자 "SomeFile2.bug", //bug 소문자 "SomeFile3.Bug", // Bug 대,소문자 이전 장에서 공부한 [Test]를 사용할 경우 3개의 테스트 함수가 필요하다. [Test] public void IsValidExtension_UpperExtension_ResultTrue() // UpperExtension { CFileExtension analyzer = new..
일단 크고 복작한거 다 필요 없다. 가장 간단한 예제를 보면 대충 감이 온다. 먼저 테스트를 해야 되는 코드를 구현한다.Class Library 프로젝트를 하나 생성하고 이름을 FileExtension 으로 정한다.자동으로 생성되는 class1.cs 파일 이름을 바꾼다 => CFileExtension.cs (만약 자동으로 생성되지 않으면 하나 생성한다)바꾼 파일을 아래와 같이 코딩한다. namespace FileExtension { public class CFileExtension { public bool IsValidFileExtension(string fullFileName) { if (fullFileName.EndsWith(".BUG")) //"BUG" 다 대문자 { return true; } re..
NUnit 설치하기Visual Studio를 실행한다.메뉴에 있는 TOOLS -> NuGet Package Manager ->Manage NuGet Packages for Solution..선택 => 폼이 하나 뜸Online-> ALL 선택 -> 검색에창 "NUnit" 검색 => Nunit, Nunit Runners을 설치한다. 혹시 2012, 2013 버전을 사용하는 사람은 NUnit Test Adapter for vs 2012, 2013까지 설치한다. (책에서는 Adapter에 대해선 얘기가 없는데 검색해 보니 NUnit을 더 편하게 사용할 수있다.)차라례 설치하고 나면 아래와 같이 .nuget 이라는 폴더가 하나 생긴다.(Adapter 설치하지 않으면 안생길지도,,?)이것으로 설치 끝! 혹시 제대로..
Unit Testing에 관심이 생겨서 네이버에서 검색해 봤는데 대부분 초반 설치하는법만 나와있고 어떻게 사용하는지 잘 안나와 있어서, 걍 공부도 하면서 정리나 해봐야겠다 생각이 들었다. 그래서 "어떤 책을 가지고 공부할까?" 하고 googling 해서 찾은 책, "The Art of UNIT TESTING with examples in C#, 2nd Edition" (첫번째 Edition은 "in .NET") 표지는 아래와 같다. 번역서가 없어서 원서를 구했다. .....그나저나 오늘 8월 15일인데...표지는 올리지 말까 고민되는구만 -0-; 열심히 PASS를 만들어 봐야겠당
위에 ID가 기본적으로 ApplicationPoolIdentity 인가 설정되어 있었는데 저렇게 바꿔주니깐 됨..-_- 4시간 삽질했다 ㅎ
1. Collection 의 Key로 활용될 경우가 아니라면 GetHashCode() 재정의 할 필요 없음 A. Operator == 재정의했다면 무조건 재 정의 해야함. 2. 만약 정의 해야 한다면 따라야 할 3가지 규칙 A. (operator == 에서 동일한 결과를 가질경우) 두 객체는 동일한 해시 코드를 생성해야 한다. B. 객체가 생성된 이후에는 GetHashCode()에 대한 호출이 변경되면 안된다. C. 해시 함수는 integer의 표현범위 내에서 골고루 잘 분산되어야한다. 3. GetHashCode()의 역할 A. System.Object의 객체 생성자에 의해서 만들어지고 1부터 시작하여 매 객체 생성 요청때마다 1씩 증가되는 값을 생성, GetHashCode는 이걸 단순히 return 4..
1. c#에서 두개의 객체가 동일한가 확인하기 위한 4가지 메서드가 존재. public static bool ReferenceEquals (object left, object right); public static bool Equals(object left, object right); public virtual bool Equals(object right); public static bool operator ==(MyClass left, MyClass right); 1. 여러개가 존재하는 이유 + Value 타입과 Reference Type 때문에 - Reference Type 은 같은 주소를 가지고 있어야 동일함 - Value는 같은 주소는 아니라도 같은 값을 가지면 동일함 2. 재정의 하면 안되는 함..
1. enum 을 사용할 때 명시적으로 값을 주지 않으면 0부터 시작하기 때문에 None 이라는 걸 0으로 명시적으로 주자. 또한 Flag Attribute를 사용할때도 0에 None을 명시적으로 주어, 처음 시작하는 값이 0이되지 않게 해야한다. [Flags] public enum Styles { None = 0, Flat = 1, Sunken = 2, Raised = 4 } 위에 만약 None이 존재하지 않아 Flat이 0이되면 아래코드는 제대로 작동하지 않는다. if ((FlagsAttribute & Styles.Flat) != 0) { DoFlatThings(); } (FlagsAttribute & Styles.Flat) 의 결과가 모두 0이 되어버림 2. string은 최초 생성시 null이 들..
은행에서 어떤 사람의 정보를 변경한다고 가정하자. 이 사람의 이름, 나이, 주소, 저금한 금액, 등등이 있을수 있는데, 은행에서 이 사람의 정보를 업데이트 하는과정에 _name = name; _moeny += money //오늘 저금한 금액 + 이전 금액 _age = age; _address = address; _phones = phones 이렇게 업데이트가 이루어지는 과정에 _name = name; 까지만 실행되었는데 만약 다른곳 혹은 다른 쓰레드에서 이 돈을 가져가서 정리를 하고 그다음 다시 _money += money 문장이 실행되고 다른곳에서 사용된 돈이 다시 _money -= usedMoney 해서 사용된 만큼 빼고 돌아오면 아마 저금한 돈이 날라갈꺼다 (쓰레드, 크리티컬 섹션 생각하면 이해가 ..