Sitecore - Assert.IsNotNull

时间:2013-03-09 00:00:22

标签: sitecore sitecore6

我见过很少的示例sitecore应用程序,它们在业务逻辑中使用以下代码:

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

有人可以澄清这是否是sitecore惯例。我只使用Assert进行单元测试,但不是在逻辑中。

感谢。

2 个答案:

答案 0 :(得分:8)

我发现this article解决了您的大部分问题。有几个要点:

  • .NET Assert与Sitecore Assert不同。至少,Sitecore Assert更加详细。
  • Sitecore中的最佳做法是使用Asserts检查方法输入。 (你会在Sitecore的代码和Sitecore community中的代码中一致地找到这些断言(我不能告诉你有多烦恼的字段是空的。)

我认为同样重要的是要注意我在Sitecore博客中发现的许多示例都是无论如何都会发生异常的情况。因此,如果要省略ArgumentIsNotNull,例如,那将导致NullObjectException,因此Assert实际上会清除一些东西。在您的情况下,如果数据库不可用,这也会导致问题。 Assert使得错误的原因很明显。

答案 1 :(得分:5)

这是一个可以在sitecore.dll中使用的公约。如果不满足该条件,它将用于抛出异常。

例如,如果您查看Assert.IsTrue,如果不满足条件,系统将抛出" InvalidOperationException"

从搜索API中反编译一个方法我发现了这个。

  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声明在幕后做了什么,如果您想要使用它,它取决于您。