Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Ярлык: eann
, Доступный в: C# 2.0 + файлы, где оператор типа позволяется
Enforce.ArgumentNotNull($inner$, "$inner$");
Макросы:
: , Хотя этот отрывок предназначается для.NET с открытым исходным кодом Lokad. Совместно использованный библиотека, это могло быть легко адаптировано к любому другому типу проверки аргумента.
: comclass
, Доступный в : C# 2.0 + файлы, где объявление элемента типа или объявление пространства имен позволяются
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[Guid("$GUID$")]
public class $NAME$ : $INTERFACE$
{
$END$
}
Макросы
Useful при разработке приложений WinForms, где Вы хотите быть уверенными, что код выполняется на корректном потоке для данного объекта. Отметьте это Control
реализации ISynchronizeInvoke
.
Ярлык : кукушка ани
Доступный в [1 111]: C# 2.0 + оператор файлов позволяется
Debug.Assert(!$SYNC_INVOKE$.InvokeRequired, "InvokeRequired");
Макросы
System.ComponentModel.ISynchronizeInvoke
Очень простой шаблон для добавления трассировки с отформатированной строкой (как Отладка. WriteLine уже поддерживает).
Ярлык: twlf
, Доступный в: C# 2.0 + файлы, где оператор позволяется
Trace.WriteLine(string.Format("$MASK$",$ARGUMENT$));
свойства Macros:
value
- маска EditableOccurence "{0}"
- EditableOccurenceЭто - немного Ламе, но это полезно. Надо надеяться, кто-то вытащит некоторую утилиту из него.
Ярлык: testMethod
, Доступный в: C# 2.0
[TestMethod]
public void $TestName$()
{
throw new NotImplementedException();
//Arrange.
//Act.
//Assert.
}
$END$
: ntf
, Доступный в: C# 2.0 + файлы, где объявление элемента типа или объявление пространства имен позволяются
[NUnit.Framework.TestFixtureAttribute]
public sealed class $TypeToTest$Tests
{
[NUnit.Framework.TestAttribute]
public void $Test$()
{
var t = new $TypeToTest$()
$END$
}
}
Макросы:
Ярлык: ntc
, Доступный в: C# 2.0 + файлы, где объявление элемента типа позволяется
[NUnit.Framework.TestAttribute]
public void $Test$()
{
$END$
}
Макросы:
Полезный при разработке приложений WinForms, где метод должен быть вызываемым от потоков неUI, и тот метод должен тогда Маршалл вызов на поток UI.
Ярлык : inv
, Доступный в [1 110]: C# 3.0 + оператор файлов позволяется
if (InvokeRequired)
{
Invoke((System.Action)delegate { $METHOD_NAME$($END$); });
return;
}
Макросы
, Вы обычно использовали бы этот шаблон в качестве первого оператора в данном методе, и результат напоминает:
void DoSomething(Type1 arg1)
{
if (InvokeRequired)
{
Invoke((Action)delegate { DoSomething(arg1); });
return;
}
// Rest of method will only execute on the correct thread
// ...
}
Утверждают. Шаблон AreEqual
Simple для добавления утверждает к модульному тесту
Ярлык : один
Доступный в [1 110]: в C# 2.0 + файлы, где оператор позволяется
Assert.AreEqual($expected$, $actual$);$END$
Быстрая версия:
Assert.That($expected$, Is.EqualTo($actual$));$END$
Просто быстрый ярлык для добавления к моим атрибутам модульного теста.
Ярлык : ee
, Доступный в : Доступный в: C# 2.0 + файлы, где объявление элемента типа позволяется
[ExpectedException(typeof($TYPE$))]
, Этот мог служить напоминанием (функциональности, чтобы реализовать или протестировать), который обнаруживается в бегуне модульного теста (как любой другой проигнорированный тест),
Ярлык: nts
, Доступный в: C# 2.0 + файлы, где объявление элемента типа позволяется
[Test, Ignore]
public void $TestName$()
{
throw new NotImplementedException();
}
$END$
Реализация , Joe Duffy Располагает Шаблон
Ярлык: располагают
Доступный в: C# 2.0 + файлы, где объявление элемента типа позволяется
public void Dispose()
{
Dispose(true);
System.GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
if ($MEMBER$ != null)
{
$MEMBER$.Dispose();
$MEMBER$ = null;
}
}
disposed = true;
}
}
~$CLASS$()
{
Dispose(false);
}
private bool disposed;
свойства Macros :
Объявить средство ведения журнала log4net для текущего типа.
Ярлык: log
Доступно в: файлах C # 2.0+, где разрешено объявление члена типа
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof($TYPE$));
Свойства макроса :
Shortcut: teardown
Available in: Available in: C# 2.0+ files where type member declaration is allowed
[NUnit.Framework.TearDown]
public void TearDown()
{
$END$
}
Ярлык : fake
Доступен в : [в файлах c # 2.0, где разрешен оператор]
$ TYPE $ $ Name $ Fake = Isolate.Fake.Instance ();
Isolate.WhenCalled (() => $ Name $ Fake.)
Свойства макроса:
* $ TYPE $ - Предложить тип новой переменной
* $ Name $ - значение другой переменной ( Тип ) с первым символом в нижнем регистре
Shortcut: setup
Available in: Available in: C# 2.0+ files where type member declaration is allowed
[NUnit.Framework.SetUp]
public void SetUp()
{
$END$
}
Сокращение: ifn
Доступно: Файлы C # 2.0+
if (null == $var$)
{
$END$
}
Ярлык : ifnn
Доступно в: файлах C # 2.0+
if (null != $var$)
{
$END$
}
Поскольку я сейчас работаю с Unity, я придумал несколько, чтобы немного облегчить себе жизнь:
Ярлык : ta
Доступно в ]: * .xml; * .config
<typeAlias alias="$ALIAS$" type="$TYPE$,$ASSEMBLY$"/>
Это тип без имени и без аргументов
Ярлык : tp
Доступен в : * .xml; * .config
<type type="$TYPE$" mapTo="$MAPTYPE$"/>
Это тип с именем и без аргументов
Ярлык : tn
Доступно в : * .xml; * .config
<type type="$TYPE$" mapTo="$MAPTYPE$" name="$NAME$"/>
Это тип с именем и без аргументов
Ярлык : tpc
Доступен в : * .xml; * .config
<type type="$TYPE$" mapTo="$MAPTYPE$">
<typeConfig>
<constructor>
$PARAMS$
</constructor>
</typeConfig>
</type>
и т.д ....
Новый тест MS Test Unit, использующий синтаксис AAA и соглашение об именах, найденное в Art Of Unit Testing
Ярлык: testing (или tst, или что угодно)
Доступно в: файлах C# 2.0+, где разрешено объявление члена типа
[TestMethod]
public void $MethodName$_$StateUnderTest$_$ExpectedBehavior$()
{
// Arrange
$END$
// Act
// Assert
}
Свойства макросов (если есть):
Ярлык : RhinoMocksRecordPlaybackSyntax *
Доступен в: файлах C # 2.0+
Примечание: Этот фрагмент кода зависит от MockRepository ( var mocks = new new MockRepository ();
) уже объявлен и инициализирован где-то еще.
using (mocks.Record())
{
$END$
}
using (mocks.Playback())
{
}
* может показаться слишком длинным для имени ярлыка, но с intellisense не проблема при вводе. также есть другие фрагменты кода для Rhino Mocks, поэтому полное определение имени упрощает их визуальную группировку
Ярлык : RhinoMocksExpectMethod
Доступен в: файлах C # 2.0+
Expect.Call($EXPECT_CODE$).Return($RETURN_VALUE$);
Ярлык : RhinoMocksExpectVoidMethod
Доступно в: файлах C # 2.0+
Expect.Call(delegate { $EXPECT_CODE$; });