5

ビジネスロジック内で以下のコードを使用するサンプルサイトコアアプリケーションをいくつか見ました。

 Database database = Factory.GetDatabase(itemUri.DatabaseName);
 Assert.IsNotNull(database, itemUri.DatabaseName);
 return database.GetItem(attribute);

これがサイトコアの慣習であるかどうかを誰かが明確にしてください。私はユニットテストシナリオにのみAssertを使用しましたが、ロジック内では使用していません。

ありがとう。

4

2 に答える 2

8

私はあなたの質問のほとんどに対処するこの記事を見つけました。重要なポイントがいくつかあります。

  • .NETアサーションはSitecoreアサーションと同じではありません。少なくとも、SitecoreAssertはかなり冗長です。
  • アサートを使用してメソッド入力をチェックすることは、Sitecoreのベストプラクティスと見なされています。(そして、これらのアサートは、SitecoreのコードとSitecore コミュニティのコードで一貫して見つかります(フィールドがnullであることがどれほど厄介であるかはわかりません))

Sitecoreブログで見つけた例の多くは、とにかく例外が発生する場合であることに注意することも重要だと思います。したがって、ArgumentIsNotNullたとえば省略した場合、結果はになりNullObjectExceptionます。したがって、Assertは実際に少しクリーンアップします。あなたの場合、データベースが利用できない場合、それも問題を引き起こします。アサートは、エラーの原因が明確になるようにします。

于 2013-03-09T05:30:55.280 に答える
5

これは、sitecore.dllで使用されている規則です。その条件が満たされない場合に例外をスローするために使用されます。

たとえば、Assert.IsTrueを見ると、条件が満たされない場合、システムは「InvalidOperationException」をスローします。

SearchAPIからメソッドを逆コンパイルするこれを見つけました。

  Assert.IsTrue(local_0 != null, "SearchConfiguration is missing");

次に、IsTrueを逆コンパイルすると、次のようになります。

   [AssertionMethod]
public static void IsTrue([AssertionCondition(AssertionConditionType.IS_TRUE)] bool condition, string message)
{
  if (!condition)
    throw new InvalidOperationException(message);
}

他の質問に答えるには、アプリケーションコードでこれを使用できます。これは、条件が満たされない場合に例外をスローする別の方法を確認できるためです。

混乱は、assertという単語の使用に伴います。これは、あなたが言ったように、通常、従来のc#.NETソリューションの単体テストのコンテキストで見られます。Sitecoreアサーションが舞台裏で何をしているのかを知っている限り、それを使用するかどうかはあなた次第です。

于 2015-05-19T00:36:33.137 に答える