TDD가 클릭하지 않았을 때 다른 것은'더 어려워'를 클릭해야 합니다!
좋은 댓글 두 편을 썼어요.
TDD가 뭔지 모르면
TDD(테스트 드라이브 개발)는 먼저 테스트를 작성하여 소프트웨어를 개발하는 방법이다.
허허...테스트 먼저?!
예, 실제 코드를 작성하기 전에 테스트를 작성하십시오. 그렇지 않으면 TDD를 진행할 수 없습니다.
왜 TDD를 귀찮게 합니까?
밥 아저씨가 이렇게 많이 말했는데 코드를 재구성할 수 없어요.
you fear what you have created, you lost control of it... now it controls you; you no longer are the master!
Buuut。。。TDD는 나를 위해 일한 적이 없다😓
TDD를 세 번 해봤습니다.
많이 배웠어요...에이, 그것은 여전히 클릭하지 않았다😞
왜 얘가 안 눌러요?
TDD 예제 세 가지를 보여 드리겠습니다.
여기서 저는 포장기 방법
DownloadPage
을 사용하여 페이지를 다운로드하려고 합니다. 이 방법은 사용 중HttpClient
입니다.NET 프레임 내부, 그러면 전면적인 테스트를 거친 프레임 위에서 테스트 방법의 의미는 무엇입니까?public async Task<string> DownloadPage(string songName)
{
try
{
using (HttpClient wClient = new HttpClient())
{
var queryString = new StringContent("search=" + songName, Encoding.UTF8, "application/x-www-form-urlencoded");
Task<HttpResponseMessage> task = wClient.PostAsync(new Uri(_songsSource), queryString);
var result = await task;
result.EnsureSuccessStatusCode();
if (task.Status == TaskStatus.RanToCompletion) return await result.Content.ReadAsStringAsync();
else return ErrorOutputs.ErrorServer;
}
}
catch
{
if (CheckInternetConnection()) return ErrorOutputs.ErrorServer;
else return ErrorOutputs.ErrorNoInternet;
}
}
[TestMethod]
public void DownloadPageShouldFailWhenNotHavingInternet()
{
//Arrange
string path = @"C:\Users\DarkOne\Downloads\test2.html";
InternetUtils.SetSource(InternetUtils.SourceMp3Int);
//Act
var downloadedHtml = DownloadPage("Sia");
//Assert
System.IO.File.WriteAllText(path, downloadedHtml.Result);
Assert.AreNotEqual(downloadedHtml.Result, ErrorOutputs.ErrorNoInternet);
}
나의 두 번째 생각은 사용자가 로그인했는지 테스트한 후에 이 페이지를 표시할 수 있다는 것이다. 그러나 auth는 AspNetCore.Identity.EntityFrameworkCore
패키지의 일부분이다. 그렇다면 왜 유효한 것을 테스트해야 하는가 하는 것이다.public class StudentController : Controller
{
// GET: Agent/Student/Details/5
[Route("/Agent/Student/Details/{id}")]
public async Task<IActionResult> Details(int id)
{
var student = await _repository.StudentData.GetById(id);
if (student == null)
{
return NotFound();
}
if (await _authorizationService.AuthorizeAsync(User, student, new HisOwnStudentRequirement()
{
return View(student.ToStudentDetailsViewModel(_environment));
}
return new ChallengeResult();
}
}
[Fact]
public void ShowDataJustForHisOwn_ForAgent_Details()
{
int studentId = 4;
var agent = new Agent() { UserName = JunkyData.AgentsEmails[0] };
JunkyDataManager.FixJunkyStudents(agent);
MyMvc
.Controller<StudentController>()
.WithAuthenticatedUser(user =>
{
user.InRole(nameof(Role.Agent));
user.WithUsername(agent.UserName);
user.WithIdentifier(agent.UserName);
})
.WithDbContext(dbContext => dbContext
.WithEntities(entities => entities.AddRange(JunkyDataManager.JunkyStudents)))
.Calling(c => c.Details(studentId))
.ShouldReturn()
.View()
.WithModelOfType<StudentDetailsViewModel>()
.Passing(s =>
Assert.Equal(JunkyDataManager.JunkyStudents[studentId - 1].Name, s.Name));
}
reddit에서, 그들은 컨트롤러에 넣지 않고, 코드를 서비스에 넣고, 이 서비스를 테스트하는 것을 권장합니다.나는 할 수 없다. 왜냐하면 서비스는 프레임워크 내부에 집중하여 그 일을 완성해야 하기 때문이다.이게 왜야!
서비스가 있든 없든 단원 테스트를 통해 최종 테스트는 논리가 아니라 프레임워크입니다!
나는 나의 세 번째 촬영에 대해 언급하지 않을 것이다. 같은 일이 다시 일어나기 때문에...테스트 프레임워크!
실용주의 방법
지난번에 낭문 사전을 보았을 때, 그 사전은 다음과 같이 정의되었다.
그래서 나는 내 말을 인용할 것이다 (이것이 유효한지 아닌지는 확실하지 않다)😁):
When someone tells the word "pragmatic approach", be sure he ain't referring to a "dirty approach".
그렇다면 TDD 하면 실용적인 방법은 무엇입니까?
우리는 이미 해 보았다...BAAAD다!
매우 간단: TDD를 완전히 하지 않고 통합 테스트를 한다.
Coretab Academy API에 대한 통합 테스트:
https://github.com/coretabs-academy/website-v2/blob/master/tests/postman/academy_api_collection.json
그러나 까다로운 것은 API에서 업무 논리를 테스트했다는 것이다.테스트 API는 응답을 확인하는 HTTP 상태 코드일 뿐입니다...이게 다야!
(예: GET/workshops를 클릭하여 200으로 돌아가도 됩니까?)
F#$k TDD, 효과가 없을 것 같으니 해결 방안을 주세요!!
며칠 전까지 남겨 둡시다.
업데이트:
자기의 의견을 고집하는 제시
나는 반드시 이것들을 언급해서 문제를 설명해야 한다.
MVC 아키텍처 스타일을 사용한다면 비즈니스 논리를 어디에 저장하시겠습니까?모형입니까 아니면 컨트롤러입니까?
DDD(영역 구동 설계)는 컨트롤러가 아닌 모델을 테스트해야 한다는 것을 의미한다.DDD에 대한 추가 참고 자료입니다.
예를 들어, Django에서 ORM이 특정 객체를 업데이트하는지 테스트하지 마십시오...왜냐하면 얘는 마땅히!
이것은 단지 접착 테스트일 뿐, 사용자 인터페이스의 모든 변경은 테스트를 업데이트할 것이다.이것은 마치 테스트 1+1=2와 같다, 그렇지?
그리고 방정식을 바꿀 때
1 + 2 = 2... 아, 실패했어.
1 + 2 = 3... 드디어 통과!
이 물건들을 테스트하는 것은 무의미하다.
나는 이것이 아직 부족하다는 것을 알지만, 나는 이것이 가장 효과적인 방식이라고 생각한다.TypeScript든 elm이든 브라우저를 다시 불러와서 작업 여부를 확인하는 시간을 절약할 수 있습니다.
공구서류
나는 잠을 잘 수 없다. 그렇지 않으면 나는 죄책감을 느낄 것이다😁
Reference
이 문제에 관하여(TDD가 클릭하지 않았을 때 다른 것은'더 어려워'를 클릭해야 합니다!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/yaser/when-tdd-doesnt-click-something-else-should-click-harder-2h9h텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)