TDD가 클릭하지 않았을 때 다른 것은'더 어려워'를 클릭해야 합니다!

7338 단어 testingtdd
초기의
좋은 댓글 두 편을 썼어요.
  • 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를 세 번 해봤습니다.
  • Spotify와 유사한android 응용 프로그램
  • 대학 응용 프로그램 웹 응용 프로그램
  • 프레젠테이션 프로그램이라도 그 빌어먹을 걸 배우기 위해서!
  • 그래서 여기저기 물어볼 때가 된 것 같아요. 제가 10개월 전에 Reddit에 문제를 하나 썼어요. Did controller testing became ridiculously tedious?
    많이 배웠어요...에이, 그것은 여전히 클릭하지 않았다😞

    왜 얘가 안 눌러요?


    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, 효과가 없을 것 같으니 해결 방안을 주세요!!


    며칠 전까지 남겨 둡시다.
    업데이트:

    자기의 의견을 고집하는 제시



    나는 반드시 이것들을 언급해서 문제를 설명해야 한다.
  • TDD는 자신만의 프레임워크/라이브러리를 구축하기에 매우 적합합니다.
  • TDDD와 DDD를 함께 사용하면 최상의 성능을 발휘할 수 있습니다.
    MVC 아키텍처 스타일을 사용한다면 비즈니스 논리를 어디에 저장하시겠습니까?모형입니까 아니면 컨트롤러입니까?
    DDD(영역 구동 설계)는 컨트롤러가 아닌 모델을 테스트해야 한다는 것을 의미한다.DDD에 대한 추가 참고 자료입니다.
  • 프레임워크를 테스트하지 마세요. 당신이 사용하는 구성 요소의 목적이 무엇인지 테스트하세요.
    예를 들어, Django에서 ORM이 특정 객체를 업데이트하는지 테스트하지 마십시오...왜냐하면 얘는 마땅히!
  • 사용자 인터페이스에서 유닛 테스트를 수행하지 않음(프런트엔드)
    이것은 단지 접착 테스트일 뿐, 사용자 인터페이스의 모든 변경은 테스트를 업데이트할 것이다.이것은 마치 테스트 1+1=2와 같다, 그렇지?
    그리고 방정식을 바꿀 때
    1 + 2 = 2... 아, 실패했어.
    1 + 2 = 3... 드디어 통과!
    이 물건들을 테스트하는 것은 무의미하다.
  • 사용자 인터페이스를 테스트하지 않고 프런트엔드에서 입력 시스템을 사용합니다.
    나는 이것이 아직 부족하다는 것을 알지만, 나는 이것이 가장 효과적인 방식이라고 생각한다.TypeScript든 elm이든 브라우저를 다시 불러와서 작업 여부를 확인하는 시간을 절약할 수 있습니다.
  • 공구서류


    나는 잠을 잘 수 없다. 그렇지 않으면 나는 죄책감을 느낄 것이다😁
  • 밥 아저씨(부분)는 TDD에 대해 이야기했다.
  • 표지 템플릿: https://giphy.com/gifs/CDJo4EgHwbaPS
  • 의견 모인: https://giphy.com/gifs/discussion-fandom-opinion-5XNEIKcohVG8w
  • Pluralsight에서 Julie Lerman과 Steve Smith의 DDD great course: https://app.pluralsight.com/library/courses/domain-driven-design-fundamentals/table-of-contents
  • (잠이 필요해요. 이것도 넣으라고요) 랑어용 정의: https://www.ldoceonline.com/dictionary/pragmatic
  • 좋은 웹페이지 즐겨찾기