J'essaie de résoudre le diamond kata afin d'apprendre à écrire des tests basés sur la propriété avec la bibliothèque fscheck. Je veux écrire les tests avec C# et j'utilise Visual Studio 2017.C#, xunit, fscheck, écrire un simple test basé sur la propriété en utilisant un générateur personnalisé ou une chaîne aléatoire contrainte
Je veux écrire un test basé sur une propriété qui ne génère pas de caractères aléatoires en entrée, mais seulement des lettres. Je ne sais pas comment écrire le générateur fscheck nécessite de le faire et dans quel fichier mettre le code? J'ai cherché partout et lu la documentation, mais j'ai des problèmes (en partie parce que je ne peux pas très bien traduire F # en C#).
Comment [Property]
est-il utilisé pour contraindre les données d'entrée uniquement aux lettres?
S'il y a une meilleure approche s'il vous plaît faites le moi savoir.
[Edit:]
Je modifié mes exemples de code, qui contiennent maintenant une solution de travail par Kurt Schelfthout.
Tests
using DiamondKata;
using FsCheck;
using FsCheck.Xunit;
using Xunit;
namespace DiamondKataTests
{
public static class Arbitraries
{
private static readonly string upperAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static readonly string lowerAlphabet = ""; //upperAlphabet.ToLower();
private static readonly char[] wholeAlphabet = (lowerAlphabet + upperAlphabet).ToCharArray();
public static Arbitrary<char> LetterGenerator()
{
return Gen.Elements(wholeAlphabet).ToArbitrary();
}
}
public class DiamondKataTests
{
// THIS WORKS and is apparently the preferred way of doing things
// also see here: https://stackoverflow.com/questions/32811322/fscheck-in-c-generate-a-list-of-two-dimension-arrays-with-the-same-shape
[Property()]
public Property shouldReturnStringAssumesValidCharWasProvided()
{
return Prop.ForAll(Arbitraries.LetterGenerator(), letter =>
// test here
Assert.NotNull(Diamond.Create(letter))
);
}
// Second solution ...
// Error here: Arbitraries is a type not valid in the given context
[Property(Arbitrary = new[] { typeof<Arbitraries> })]
public void testThatAssumesValidCharWasProvided(char lettersOnlyHERE)
{
// ?
}
}
}
classe Pour tester
namespace DiamondKata
{
public class Diamond
{
public static string Create(char turningPointCharacter)
{
return "";
}
}
}
merci beaucoup pour votre réponse, malheureusement vos solutions me donner des erreurs. J'ai édité le message ci-dessus qui inclut maintenant votre code et commentaires où j'obtiens des erreurs ... merci! – Shakka
trouvé le correctif pour l'une des erreurs moi-même, votre syntaxe était légèrement éteint, j'ai pris la liberté et édité votre solution, merci encore! – Shakka