Sitecore - Assert.IsNotNull

Nil*_*Pun 5 sitecore sitecore6

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

 Database database = Factory.GetDatabase(itemUri.DatabaseName);
 Assert.IsNotNull(database, itemUri.DatabaseName);
 return database.GetItem(attribute);
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

cwa*_*ole 8

我发现这篇文章解决了你的大部分问题.有几个要点:

  • .NET Assert与Sitecore Assert不同.Sitecore Assert至少是一个更加冗长的问题.
  • Sitecore中的最佳做法是使用Asserts来检查方法输入.(并且你会在Sitecore的代码和Sitecore 社区中的代码中找到这些Asserts (我无法告诉你,有多烦恼的Field是null).)

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

  • 值得指出的是`System.Diagnostics.Debug.Assert`是有条件的,只会在应用程序的DEBUG版本中触发.Sitecore.Assert没有这样的限制,因此每当DEBUG和RELEASE构建中的测试条件失败时都会引发InvalidOperationException. (3认同)

Isu*_*eka 5

这是一个惯例,可以看到在sitecore.dll中使用heviliy.如果不满足该条件,它将用于抛出异常.

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

从搜索API反编译方法我发现了这一点.

  Assert.IsTrue(local_0 != null, "SearchConfiguration is missing");
Run Code Online (Sandbox Code Playgroud)

然后,如果我们解编译IsTrue,它就会给我们

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

要回答您的其他问题,您可以在应用程序代码中使用它,因为您可以看到它只是在不满足条件时抛出异常的另一种方法.

使用assert这个词会引起混淆,正如你所说的那样,通常在传统的c#.NET解决方案的单元测试环境中看到.只要您知道Sitecore声明在幕后做了什么,如果您想要使用它,它取决于您.