[RUBY] Ecrire un test en mettant en œuvre l'histoire de M. Nabeats dans le monde avec du rubis

Pourquoi j'ai décidé de le faire

--Je voulais écrire un test unitaire avec rspec

spécification

«Premièrement," Je vais faire quelque chose d'intéressant, c'est-à-dire quelque chose de drôle " --Compte de 1 à 40 ――Quand le nombre a 3, ça devient stupide ――Quand c'est un multiple de 3, ça devient stupide

Tout d'abord, la mise en œuvre

omoro.rb


TSUJO_KAO_MOJI = "(・`ω ・ ´)" #Ordinaire
AHO_KAO_MOJI = "ʅ( ՞ਊ՞)ʃ≡" #Je vais être stupide
DOG_KAO_MOJI = "∪ ・ ω ・ ∪" #L'intention d'Inu

puts 'Je vais faire quelque chose d'intéressant, c'est-à-dire quelque chose de drôle'

(1..40).each do |figure|
  sleep 0.5
  
  if figure % 5 == 0
    puts figure.to_s + DOG_KAO_MOJI
    next
  end

  if figure % 3 == 0
    puts figure.to_s + AHO_KAO_MOJI
    next
  end

  if /3/ =~ figure.to_s
    puts figure.to_s + AHO_KAO_MOJI
    next
  end
  
  puts figure.to_s + TSUJO_KAO_MOJI
end

puts 'Demain'

ruby omoro.Courir sur rb



```Je vais faire quelque chose d'intéressant, c'est-à-dire quelque chose de drôle
1(・`ω ・ ´)
2(・`ω ・ ´)
3ʅ( ՞ਊ՞)ʃ≡
4(・`ω ・ ´)
5∪ ・ ω ・ ∪
6ʅ( ՞ਊ՞)ʃ≡
7(・`ω ・ ´)
8(・`ω ・ ´)
9ʅ( ՞ਊ՞)ʃ≡
10∪ ・ ω ・ ∪
11(・`ω ・ ´)
12ʅ( ՞ਊ՞)ʃ≡
13ʅ( ՞ਊ՞)ʃ≡
14(・`ω ・ ´)
15∪ ・ ω ・ ∪
16(・`ω ・ ´)
17(・`ω ・ ´)
18ʅ( ՞ਊ՞)ʃ≡
19(・`ω ・ ´)
20∪ ・ ω ・ ∪
21ʅ( ՞ਊ՞)ʃ≡
22(・`ω ・ ´)
23ʅ( ՞ਊ՞)ʃ≡
24ʅ( ՞ਊ՞)ʃ≡
25∪ ・ ω ・ ∪
26(・`ω ・ ´)
27ʅ( ՞ਊ՞)ʃ≡
28(・`ω ・ ´)
29(・`ω ・ ´)
30∪ ・ ω ・ ∪
31ʅ( ՞ਊ՞)ʃ≡
32ʅ( ՞ਊ՞)ʃ≡
33ʅ( ՞ਊ՞)ʃ≡
34ʅ( ՞ਊ՞)ʃ≡
35∪ ・ ω ・ ∪
36ʅ( ՞ਊ՞)ʃ≡
37ʅ( ՞ਊ՞)ʃ≡
38ʅ( ՞ਊ՞)ʃ≡
39ʅ( ՞ਊ՞)ʃ≡
40∪ ・ ω ・ ∪
Demain

l'a fait. Cependant, avec cela, il n'y a pas de méthode, tout le traitement est le même et un test unitaire ne peut pas être écrit. Méthodes séparées par responsabilité.

omoro_class.rb


class Omoro
  TSUKAMI = "Je vais faire quelque chose d'intéressant, c'est-à-dire quelque chose de drôle"
  OCHI = "Demain"
  TSUJO_KAO_MOJI = "(・`ω ・ ´)"
  AHO_KAO_MOJI = "ʅ( ՞ਊ՞)ʃ≡"
  DOG_KAO_MOJI = "∪ ・ ω ・ ∪"
  
  #Neta
  def main(max_kazu = 40)
    speak(TSUKAMI)
    
    (1..max_kazu).each do |figure|
      sleep 1
      kao_moji = verification(figure)
      serif = make_serif(figure, kao_moji)
      speak(serif)
    end
    
    speak(OCHI)
  end
  
  #Faire des lignes
  def make_serif(figure, kao_moji)
    figure.to_s + kao_moji
  end
  
  #decider
  def verification(figure)
    if figure % 5 == 0
      return DOG_KAO_MOJI
    end
    
    if figure % 3 == 0 || /3/ =~ figure.to_s
      return AHO_KAO_MOJI
    end
    TSUJO_KAO_MOJI
  end
  
  #parler
  def speak(serif)
    puts serif
  end
end
  
omoro = Omoro.new
omoro.main(40)

Le cours Omorrow est prêt. En passant, vous pouvez modifier dynamiquement le nombre maximum à compter en passant un nombre arbitraire à la méthode principale. Si vous entrez 400, vous serez un imbécile ou un chien de 300 à 399. C'est difficile si vous utilisez la puissance humaine, mais c'est facile si vous l'écrivez par programmation.

Écrivez un test. en train d'étudier. Je n'utilise pas let parce que je ne le comprends pas bien. Si vous avez un Masakari doux, écrivez un exemple dans les commentaires.

omoro_spec.rb


require 'rspec'
require_relative '../omoro_class'

RSpec.describe Omoro do
    TSUJO_KAO_MOJI = "(・`ω ・ ´)"
    AHO_KAO_MOJI = "ʅ( ՞ਊ՞)ʃ≡"
    DOG_KAO_MOJI = "∪ ・ ω ・ ∪"

  it 'Nombres(1)+ Caractère du visage((・`ω ・ ´))Pour générer les lignes de' do
    expect(Omoro.new.make_serif(1, TSUJO_KAO_MOJI)).to eq '1(・`ω ・ ´)'
  end

  it 'Nombres(3)+ Caractère du visage(3ʅ( ՞ਊ՞)ʃ≡)Pour générer les lignes de' do
    expect(Omoro.new.make_serif(3, AHO_KAO_MOJI)).to eq '3ʅ( ՞ਊ՞)ʃ≡'
  end

  it 'Inu' do
    expect(Omoro.new.make_serif(5, DOG_KAO_MOJI)).to eq '5∪ ・ ω ・ ∪'
  end

  it '3 est attaché' do
    expect(Omoro.new.make_serif(33, 'ʅ( ՞ਊ՞)ʃ≡')).to eq '33ʅ( ՞ਊ՞)ʃ≡'
  end

  it 'verification' do
    omoro = Omoro.new
    (1..40).each do |figure|
      if figure % 5 == 0
        expect(omoro.verification(figure)).to eq DOG_KAO_MOJI
      elsif figure % 3 == 0 || /3/ =~ figure.to_s
        expect(omoro.verification(figure)).to eq AHO_KAO_MOJI
      else
        expect(omoro.verification(figure)).to eq TSUJO_KAO_MOJI
      end
    end
  end

  it 'main' do
    omoro = Omoro.new
    expect { omoro.main(5) }.to output(
      "Je vais faire quelque chose d'intéressant, c'est-à-dire quelque chose de drôle\n1(・`ω ・ ´)\n2(・`ω ・ ´)\n3ʅ( ՞ਊ՞)ʃ≡\n4(・`ω ・ ´)\n5∪ ・ ω ・ ∪\n Omorrow\n").to_stdout
  end
end

Personnellement, je pense que la vérification et les principales méthodes peuvent être améliorées, mais je ne savais pas comment le faire.

Les références

[Katsura 3 fois \ -Wikipedia](https://ja.wikipedia.org/wiki/%E6%A1%82%E4%B8%89%E5%BA%A6#%E4%B8%96%E7%95% 8C% E3% 81% AE% E3% 83% 8A% E3% 83% 99% E3% 82% A2% E3% 83% 84)

[\ Ruby ] Test unitaire commençant par Rspec \ (Test unitaire ) \ | qs Developers

Tester la sortie standard avec Rspec \ -Qiita

Recommended Posts

Ecrire un test en mettant en œuvre l'histoire de M. Nabeats dans le monde avec du rubis
Implémenter le poker petit à petit dans Ruby Part 1
Implémenter le poker petit à petit dans Ruby Part 4
Implémenter le poker petit à petit dans Ruby Part 3
Lourd en rubis! ??
Ecrire un test en mettant en œuvre l'histoire de M. Nabeats dans le monde avec du rubis
Triangle de sortie en Ruby
Types de variables dans ruby
Popcount rapide en Ruby
Nommer et appeler explicitement des méthodes de classe parent dans Ruby
L'histoire de la création d'un proxy inverse avec ProxyServlet
Une histoire remplie des bases de Spring Boot (résolu)
Trouvez le nombre de jours dans un mois avec Kotlin
L'histoire du refactoring avec un assistant personnel pour la première fois dans une application Rails
Une histoire sur l'utilisation de l'API League Of Legends avec JAVA
Une histoire qui a eu du mal avec l'introduction de Web Apple Pay
[Illustration] Recherche de la somme des pièces avec une fonction récursive [Ruby]
L'histoire de rendre possible la construction d'un projet qui a été construit par Maven avec Ant
Je voulais écrire un processus équivalent à une instruction while avec l'API Java 8 Stream
L'histoire de l'oubli de fermer un fichier en Java et de l'échec
L'histoire de la création d'un lanceur de jeu avec une fonction de chargement automatique [Java]
Implémenter le poker petit à petit dans Ruby Part 2
Implémenter le poker petit à petit dans Ruby Part 1
Implémenter le poker petit à petit dans Ruby Part 4
Extraire une partie d'une chaîne en Ruby
L'histoire de l'écriture de Java dans Emacs
Ecrire le mouvement de Rakefile dans le runbook
[Note] [Débutant] Comment écrire lors de la modification de la valeur d'un élément de tableau dans une phrase répétée de Ruby
Comment obtenir l'ID d'un utilisateur qui s'est authentifié avec Firebase dans Swift
Valider le jeton d'ID d'un utilisateur authentifié par AWS Cognito en Java
J'ai essayé d'exprimer le numéro de téléphone (téléphone fixe / téléphone portable) avec une expression régulière dans Rails et d'écrire la validation et le test
L'histoire de la fabrication d'un Othello ordinaire à Java
Une histoire sur le JDK à l'ère de Java 11
Mesurer la taille d'un dossier avec Java
L'histoire de l'introduction de la communication Ajax à Ruby
Gérez la version de Ruby elle-même avec rbenv
L'histoire du réglage de l'application Android avec libGDX
J'ai vérifié le nombre de taxis avec Ruby
[Jackson] Une histoire sur la conversion de la valeur de retour du type BigDecimal avec un sérialiseur personnalisé.
[Java] Informations entières des caractères du fichier texte acquises par la méthode read ()
Comment écrire un exemple d'implémentation du problème dans E05 (ruby, C11) en temps réel hors ligne
Comment demander en passant un tableau à une requête avec le client HTTP de Ruby
Compter la fréquence d'apparition des mots dans une phrase par traitement de flux (Apache Apex)
Une revue du code utilisé par les rails débutants
Format de la sortie du journal par Tomcat lui-même dans Tomcat 8
[Ruby] Le rôle des indices dans l'apprentissage des éléments dans les tableaux
Obtenez le nom du scénario de test dans la classe de test JUnit
[Compatible JUnit 5] Ecrire un test en utilisant JUnit 5 avec Spring boot 2.2, 2.3
Calculer la différence entre les nombres dans un tableau Ruby
[Ruby / Rails] Définissez une valeur unique (unique) dans la classe
[JUnit 5] Ecrivez un test de validation avec Spring Boot! [Test de paramétrage]
Obtenez l'URL de la destination de la redirection HTTP dans Ruby
L'histoire de la création de DTO, semblable à Dao avec Java, SQLite
[Ruby] Prenez l'habitude d'utiliser la méthode dup lors de la copie d'une variable chaîne
L'histoire du transfert d'un conteneur Docker vers le registre de packages GitHub et Docker Hub avec des actions GitHub
L'histoire de la création d'une version Java du serveur Minecraft avec GCP (et également de la création d'une liste blanche)
L'histoire de l'introduction d'un framework sans serveur très semblable à Rails "Ruby on Jets" dans l'environnement de production