0

メソッドを右クリックし、いくつかのパラメーター値を入力して、それをテスト (またはそのようなもの) できるようにしたいと考えています。

Visual-Studio でビルトイン MVC 単体テストを見てきましたが、学習をあきらめました..小さな単純なメソッドをテストするためだけに通過するのは、非常に多くの問題のようです。本格的なプロジェクトを作成するときに、それを使用する本当に正当な理由があると確信しています。

しかし、迅速で汚い代替手段はありますか?


クールな解決策は、Visual Studio のウィンドウで、(インテリセンスを使用して!) 次のようなものを書くことができました。

HelloWorld obj = new HelloWorld();
obj.Print();

[実行] をクリックすると、すぐに結果が表示されます。即時ウィンドウと同じですが、デバッグ時にのみ機能します:(

4

4 に答える 4

3

TestDriven.NETまたはCodeRushを試すことができます。どちらも、単純な右クリックとテスト (デバッグも含む) でメソッドをテストできます。

私は前者 (TestDriven.NET) を好みます。テスト ランナーを介して (テストだけでなく) 任意のメソッドを実行できるからです。

どちらも NUnit と互換性があり、おそらく他のフレームワーク (MbUnit など) と互換性があります。

于 2012-07-30T14:22:00.550 に答える
1

ReSharper の単体テスト ウィンドウは、ビジュアル スタジオの「通常の」単体テスト サポートよりもはるかに優れています。確認してください: http://www.jetbrains.com/resharper/features/unit_testing.html

于 2012-07-30T14:36:35.790 に答える
0

SnippetCompiler または LinqPad は、私が知っている最良の代替手段です。この Stack Overflow の投稿では、それらについて説明しています。

于 2012-07-30T14:22:15.753 に答える
-1

さて、ユニットテストを試してみて、うまくいきましたが、嫌いでした...

私は HttpContext を使用する必要があり、単体テスト時にそれを機能させるのは大変でした。だから私はMVCで自分のテスト環境を書いた、それは非常に簡単です:

testet が必要なメソッドに属性を設定し、プロジェクトをビルドし、ページ h**p://localhost/test を更新してそのメソッドの出力を確認します。

[QTest]
public string test()
{
    return HttpContext.Current.Server.MapPath(@"~\");
}

興味のある方は、ハウツーをご覧ください。

  1. カスタム属性を作成します。

  2. テスト ページを作成し、QTest 属性を持つアセンブリ内のすべてのメソッドを検索します。

  3. それらを印刷します。

私のコード:

CustomAttribute.cs

public class QTestAttribute : Attribute
{
    public QTestAttribute()
    {
        //Will do so you can define the method paremeter values later on. But for now a emty attribute is fine.
    }
}

あなたの TestController.cs:

static IEnumerable<Type> GetTypesWithAttribute(Assembly assembly)
{
    foreach (Type type in assembly.GetTypes())
    {
        yield return type;
    }
}
static IEnumerable<MethodInfo> GetMethodsWithAttribute(Type theClass)
{
    foreach (MethodInfo method in theClass.GetMethods())
    {
        if (method.GetCustomAttributes(typeof(QTestAttribute), true).Length > 0)
        {
            yield return method;
        }
    }
}
public ActionResult Index()
{
    IEnumerable<Type> classes = GetTypesWithAttribute(Assembly.LoadFrom(HttpContext.Request.MapPath(@"~\bin\YourProjectName.dll")));
    List<String> tests = new List<string>();
    foreach (var singleClass in classes)
    {
        try
        {
            var a = System.Reflection.Assembly.GetExecutingAssembly().CreateInstance(singleClass.FullName);
            foreach (MethodInfo method in GetMethodsWithAttribute(singleClass))
            {
                tests.Add(method.Invoke(a, null).ToString());
            }
        }
        catch (Exception ex)
        {
            try
            {
                tests.Add(ex.InnerException.Message);
            }
            catch (Exception)
            {

            }
        }
    }
    return Content(string.Join("<br>", tests));
}

カスタマイズは非常に簡単で、思い通りに機能させることができ、nunit に比べて制限がありません。

于 2012-07-30T19:34:37.163 に答える