J'ai testé comment utiliser le test / l'unité de Ruby et le code de Janken.

Tout d'abord

Le devoir disait: "Tester le programme de Janken en utilisant test / unit." J'ai entendu le code de test lui-même pour la première fois, donc je vais l'écrire comme mon propre mémo. L'environnement d'exploitation est le suivant.

mac Ruby 2.6.5 test/unit 3.3.6

Ce que vous voulez réaliser

Testez le programme de Janken en utilisant "test / unit".

Qu'est-ce que le test / l'unité

En premier lieu, le code de test est un programme pour vérifier si la logique du programme écrit fonctionne comme prévu.

test / unit est un framework de test pour Ruby, et il semble qu'il ait été installé à l'origine en standard. Veuillez vous référer à ici pour l'installation de tesu / unit lui-même.

Utilisation de base du test / de l'unité

À titre de prémisse, veuillez noter que cela diffère légèrement selon la version. La syntaxe de base est la suivante.

require 'test/unit'

 class [nom de la classe] <Test :: Unit :: TestCase

end

Tout d'abord, require`` test / unit '' pour utiliser ce framework. Ensuite, créez une classe qui hérite de Test :: Unit :: TestCase. Dans Ruby, la classe devient un fichier d'exécution de test en héritant de Test :: Unit :: TestCase`.

require 'test/unit'

 class [nom de la classe] <Test :: Unit :: TestCase

 def test_ [nom de la méthode]
    foo = "hoge"
    assert_equal("hoge", foo)
  end

end

Le processus de test est comme ci-dessus. Créez une méthode et écrivez le programme que vous souhaitez tester. La règle est que le nom de la méthode commence par «test_». Dans cette méthode, écrivez la méthode de vérification dans le format suivant. (Il existe d'autres méthodes de vérification)

 assert_equal (valeur supposée, variables, méthodes, etc.)

ʻAssert_equal` garantit que la valeur de la variable et la valeur de retour de la méthode correspondent à ce que vous attendez.

C'est la fin du bref didacticiel, mais il existe d'autres méthodes disponibles par défaut, alors consultez la référence.

Solution

Ensuite, la solution de la condition de réalisation est décrite ci-dessous. Tout d'abord, j'écrirai d'abord le programme Janken. (Ce n'est pas un programme très intelligent, mais pardonnez-moi s'il vous plaît) Si vous entrez g, c ou p comme entrée standard, le résultat de Janken sera affiché.

player = gets.chomp

if player == "g"
 player = "goo"
elsif player == "c"
 player = "choki"
elsif player == "p"
 player = "par"
end

com = rand(3)
if com == 0
 com = "goo"
elsif com  == 1
 com = "choki"
else
 com = "par"
end

if player == com
 res = "dessiner"
 elsif (player == "Goo" && com == "Choki") || (player == "Choki" && com == "Par") || (player == "Par" && com == "Goo")
 res = "Vous gagnez"
else
 res = "Vous perdez"
end

 met "Vous êtes # {player}, je suis # {com}, # {res}."

Dans ce cas, nous testerons si le résultat correct est affiché lorsque les valeurs des deux variables «player» et «com» sont décidées, donc la partie suivante est testée.

if player == com
 res = "dessiner"
 elsif (player == "Goo" && com == "Choki") || (player == "Choki" && com == "Par") || (player == "Par" && com == "Goo")
 res = "Vous gagnez"
else
 res = "Vous perdez"
end

 met "Vous êtes # {player}, je suis # {com}, # {res}."

Cette fois, nous résumerons le processus ci-dessus pour déterminer la victoire ou la défaite dans une classe.

class Janken
  def self.judge(player,com)
    if player == com
 res = "dessiner"
     elsif (player == "Goo" && com == "Choki") || (player == "Choki" && com == "Par") || (player == "Par" && com == "Goo")
 res = "Vous gagnez"
    else
 res = "Vous perdez"
    end
 return "Vous êtes # {player}, je suis # {com}, # {res}."
  end
end

Le processus de victoire et de défaite de Janken est résumé dans la classe. Ensuite, écrivez le processus de test.

require 'test/unit'

class Test_Janken < Test::Unit::TestCase
  def test_janken
 assert_equal ('Vous êtes goo, je suis goo, draw.', Janken.judge ("goo", "goo"))
 assert_equal ('Tu es choki, je suis choki, dessine.', Janken.judge ("choki", "choki"))
 assert_equal ('Vous êtes égal, je suis égal, dessiner.', Janken.judge ("par", "par"))
 assert_equal ('Vous êtes goo, je suis choki, vous gagnez.', Janken.judge ("goo", "choki"))
 assert_equal ('Vous êtes choki, je suis égal, vous gagnez.', Janken.judge ("choki", "par"))
 assert_equal ('Vous êtes égal, je suis bon, vous gagnez.', Janken.judge ("par", "goo"))
 assert_equal ('Vous êtes goo, je suis par, vous perdez.', Janken.judge ("goo", "par"))
 assert_equal ('Vous êtes choki, je suis goo, vous perdez.', Janken.judge ("choki", "goo"))
 assert_equal ('Vous êtes égal, je suis choki, vous perdez.', Janken.judge ("par", "choki"))
  end
end

C'est comme vérifier les 9 modèles de victoire et de défaite de Janken avec ʻassert_equal`. Ceci est combiné avec le traitement de Janken. Le code suivant est le dernier.

require 'test/unit'

class Janken
  def self.judge(player,com)
    if player == com
 res = "dessiner"
     elsif (player == "Goo" && com == "Choki") || (player == "Choki" && com == "Par") || (player == "Par" && com == "Goo")
 res = "Vous gagnez"
    else
 res = "Vous perdez"
    end

 return "Vous êtes # {player}, je suis # {com}, # {res}."
    
  end
end

class Test_Janken < Test::Unit::TestCase
  def test_janken
 assert_equal ('Vous êtes goo, je suis goo, draw.', Janken.judge ("goo", "goo"))
 assert_equal ('Tu es choki, je suis choki, dessine.', Janken.judge ("choki", "choki"))
 assert_equal ('Vous êtes égal, je suis égal, dessiner.', Janken.judge ("par", "par"))
 assert_equal ('Vous êtes goo, je suis choki, vous gagnez.', Janken.judge ("goo", "choki"))
 assert_equal ('Vous êtes choki, je suis égal, vous gagnez.', Janken.judge ("choki", "par"))
 assert_equal ('Vous êtes égal, je suis bon, vous gagnez.', Janken.judge ("par", "goo"))
 assert_equal ('Vous êtes bon, je suis égal, vous perdez.', Janken.judge ("goo", "par"))
 assert_equal ('Vous êtes choki, je suis goo, vous perdez.', Janken.judge ("choki", "goo"))
 assert_equal ('Vous êtes égal, je suis choki, vous perdez.', Janken.judge ("par", "choki"))
  end
end

Le résultat est ,,

Loaded suite test
Started
.
Finished in 0.000811 seconds.
--------------------------------------------------------------------------------
1 tests, 9 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
--------------------------------------------------------------------------------
1233.05 tests/s, 11097.41 assertions/s

J'ai pu tester sans aucun problème.

référence

bibliothèque de test / unité --doc.ruby-lang.org

Comment utiliser le portail de test unitaire par défaut de ruby - Brain Juice

Ecrire un test avec Test :: Unit -Qiita

Recommended Posts

J'ai testé comment utiliser le test / l'unité de Ruby et le code de Janken.
Comment utiliser StringBurrer et Arrays.toString.
Comment faire un test unitaire de Spring AOP
Comment utiliser EventBus3 et ThreadMode
Comment utiliser l'égalité et l'égalité (comment utiliser l'égalité)
Comment utiliser OrientJS et OrientDB ensemble
Bibliothèque de tests unitaires Java Artery-Easy to use
Je veux écrire un test unitaire!
Comment configurer et utiliser kapt
Comment utiliser les méthodes substring et substr
Comment utiliser @Builder et @NoArgsConstructor ensemble
J'étais curieux de savoir comment utiliser correctement Optional orElse () et orElseGet ().
Comment définir différentes versions source / cible pour le code de production et le code de test
[Java] Comment utiliser la classe FileReader et la classe BufferedReader
[Ruby] Comment utiliser la méthode gsub et la sous-méthode
Comment utiliser le contrôle segmenté et les points à noter
Comment utiliser la portée et le traitement des passes (servist)
Comment écrire du code de test avec la certification de base
[Java] Comment utiliser la classe Calendar et la classe Date
[Java] J'ai étudié le polymorphisme, je vais donc résumer comment l'utiliser et ses mérites.
Comment utiliser Map
Comment utiliser rbenv
Comment écrire un test unitaire pour Spring Boot 2
Comment faire un test unitaire avec JVM sur une source à l'aide de RxAndroid
Comment utiliser with_option
Comment utiliser fields_for
Comment utiliser java.util.logging
Comment utiliser Maven que je n'entends plus
Pour implémenter, écrivez le test puis codez le processus
Comment utiliser la carte
Comment utiliser collection_select
Utilisez Allure pour générer des rapports de test élégants, indépendants du langage et du framework!
[Rails] Je ne sais pas comment utiliser le modèle ...
Comment utiliser Twitter4J
Comment utiliser MapStruct
Comment utiliser TreeSet
Comment utiliser l'identité
Comment utiliser le hachage
Comment utiliser Dozer.mapper
Comment utiliser Gradle
Comment utiliser org.immutables
Comment utiliser java.util.stream.Collector
Comment utiliser VisualVM
Comment utiliser et appliquer la classe JFrame / Canvas de Java
Comment utiliser Map
J'aimerais savoir comment améliorer le code redondant!
Comment écrire dynamiquement des cas de test itératifs à l'aide de test / unit (Test :: Unit)
Comment tester avec des images lors de l'utilisation d'ActiveStorage et de Faker
Comment spécifier le code de caractère et le code de saut de ligne avec JAXB
Comment utiliser OpenCV 4 sur Android et afficher la vue en direct de la caméra
Je souhaite générer des informations de manière aléatoire lors de l'écriture du code de test
J'ai essayé de collecter et de résoudre les problèmes liés à la «classe» de Ruby.
Comment définir le code de caractère et le code de saut de ligne dans Eclipse