한다고 가정 나는 다음과 같은 개체가 :비웃음 Guid.NewGuid()
public class User
{
public int Id { get; set; }
public string Username { get; set; }
public Guid UserGuid { get; set; }
public Guid ConfirmationGuid { get; set; }
}
다음과 같은 인터페이스 방법 :
void CreateUser(string username);
두 개의 새로운 GUID를 생성해야합니다 구현의 일부 : UserGuid
하나를, ConfirmationGuid
에 대한 또 다른. 값을 Guid.NewGuid()
으로 설정하여이 작업을 수행해야합니다.
이미 인터페이스를 사용하여() Guid.NewGuid을 추상화 한 : 하나의 새로운 GUID이 필요할 때
public interface IGuidService
{
Guid NewGuid();
}
그래서 나는 쉽게 조롱 수 있습니다. 그러나 두 메서드를 하나의 메서드 내에서 동일한 메서드로 모방하는 방법을 모르는 것이므로 서로 다른 값을 반환합니다. 당신은 MOQ를 사용하는 경우
그러나 이것은 특정 시퀀스의 구현에서 속성을 설정한다고 가정하지 않으시겠습니까? 이게 내 시험의 염려가 아닌가? 즉,이 필드는 임의의 순서로 설정할 수 있습니다. 어떤 이유로 든 테스트를 업데이트하지 않고이 순서를 변경하면 내 테스트가 이상적으로 통과해야합니다. –
음 ... 당신은 상태 대 행동 테스트에 조금 빠져 들었습니다. 전화 주문에 대한 지식을 전제로하지 않고 질문에 대답하는 방법을 모르겠습니다. –
내가 올바르게 이해한다면, 당신은'Assert.AreEqual (guid1, user.UserGuid); Assert.AreEqual (guid2, user.ConfirmationGuid);'할당 순서를 변경하면 실패합니다. 대신 순서에 관계없이 다음과 같은 일종의 콜렉션 어설 션을 사용해야합니다 : CollectionAssert.AreEquivalent (new [] {guid1, guid2}, new [] {user.UserGuid, user.ConfirmationGuid}) ; ' –