3

fscheck ライブラリを使用してプロパティ ベースのテストを作成する方法を学ぶために、ダイヤモンド カタを解決しようとしています。C# でテストを書きたいのですが、Visual Studio 2017 を使用しています。

入力としてランダムな文字を生成せず、文字のみを生成するプロパティ ベースのテストを作成したいと考えています。fscheck がこれを行うために必要なジェネレーターを記述する方法と、コードを配置するファイルがわかりません。

どこでも検索してドキュメントを読みましたが、問題が発生しています (F# を C# にうまく変換できないためです)。

[Property]入力データを文字のみに制限するためにどのように使用されますか?

より良いアプローチがあれば、私に知らせてください。

[編集:]

コード例を編集しました。これには、Kurt Schelfthout による実用的なソリューションが 1 つ含まれています。



テスト

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)
        {
            // ?
        }
    }
}

テストするクラス

namespace DiamondKata
{
    public class Diamond
    {
        public static string Create(char turningPointCharacter)
        {
            return "";
        }
    }
}
4

1 に答える 1