2

WebDriver テストの一部を Java から C# に移植しようとしています。私が立ち往生しているのは、ドライバーがページ上のいくつかの要素を見つけることができない状況です.JAVAで私は:

if (second >= 10) fail("timeout - " + list);

そのため、何かに 10 秒以上かかる場合、テストはタイムアウト メッセージで失敗します。C#で同様のアプローチを試しました

if (sec >= 10) Debug.Fail("timeout : " + vList);

しかし、これは実際にはテストに失敗しませんでしたが、例外メッセージ ボックスで失敗するオプションを与えてくれました。それはノーノーでした。自動テストが完全に失敗するようにする必要があります。それから私は試しました

if (sec >= 10) Assert.Fail("timeout : " + vList);

しかし、これは未処理の例外エラーをスローしています。Assert.Fail を try/catch ブロックで囲む必要がありますか? または、テストに失敗するには、まったく別のものを使用する必要がありますか?

トピックで述べたように、MSTest を使用しています。

編集: 正確なメッセージは次のとおりです。

AssertFailedException がユーザー コードによって処理されませんでした。Assert.Fail が失敗しました。タイムアウト: someField.

の上

Assert.Fail("タイムアウト:" + vList);

4

3 に答える 3

5

実行中のテストにデバッガーが接続されているため、この動作が発生していると思います- Assert.Failthrows AssertFailedException、デバッガーは例外とブレークを認識し、テスト結果を取得しません。

[デバッグ] メニューで、[例外] に移動し、検索AssertFailedException(または存在しない場合はそのエントリを作成) し、その例外の種類に対してスロー時にブレークがオフになっていることを確認します。

または、デバッガーをアタッチせずにテストを実行します。

于 2012-06-15T07:59:34.957 に答える
1

Assert.Fail は、失敗を「強制」したいものでなければなりません。内部的には、AssertFailedException. これがうまくいかない場合は、別のことが起こっている可能性があります...

簡単な dotPeek は、これが呼び出されることを示しています。

internal static void HandleFail(string assertionName, string message, params object[] parameters)
{
  string str = string.Empty;
  if (!string.IsNullOrEmpty(message))
    str = parameters != null ? string.Format((IFormatProvider) CultureInfo.CurrentCulture, Assert.ReplaceNulls((object) message), parameters) : Assert.ReplaceNulls((object) message);
  if (Assert.AssertionFailure != null)
    Assert.AssertionFailure((object) null, EventArgs.Empty);
  throw new AssertFailedException(FrameworkMessages.AssertionFailed((object) assertionName, (object) str));
}
于 2012-06-14T13:32:58.657 に答える
0

mstest には適切な構文を使用する必要があります

[TestMethod]
public void IsSecondsGreaterOrEqualThanTen()
{
    Assert.IsTrue(second >= 10);
}
于 2012-06-14T13:38:05.770 に答える