Поблочное тестирование дополнения.NET для Microsoft Office

Почему бы не сделать обрезку в draw ()?

Вот мое решение:

  • продлить RelativeLayout с отсечением
  • поставить ImageView (или другое ) в макет:

код:

public class RoundRelativeLayout extends RelativeLayout {

private final float radius;

public RoundRelativeLayout(Context context, AttributeSet attrs) {
    super(context, attrs);

    TypedArray attrArray = context.obtainStyledAttributes(attrs,
            R.styleable.RoundRelativeLayout);
    radius = attrArray.getDimension(
            R.styleable.RoundRelativeLayout_radius, 0);
}

private boolean isPathValid;
private final Path path = new Path();

private Path getRoundRectPath() {
    if (isPathValid) {
        return path;
    }

    path.reset();

    int width = getWidth();
    int height = getHeight();
    RectF bounds = new RectF(0, 0, width, height);

    path.addRoundRect(bounds, radius, radius, Direction.CCW);
    isPathValid = true;
    return path;
}

@Override
protected void dispatchDraw(Canvas canvas) {
    canvas.clipPath(getRoundRectPath());
    super.dispatchDraw(canvas);
}

@Override
public void draw(Canvas canvas) {
    canvas.clipPath(getRoundRectPath());
    super.draw(canvas);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

    int oldWidth = getMeasuredWidth();
    int oldHeight = getMeasuredHeight();
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    int newWidth = getMeasuredWidth();
    int newHeight = getMeasuredHeight();
    if (newWidth != oldWidth || newHeight != oldHeight) {
        isPathValid = false;
    }
}
}
6
задан Chris 26 September 2008 в 18:35
поделиться

2 ответа

Это - то, как я разрешил его.

  1. Примерно все в моем дополнении работает из метода Щелчка кнопки в UI. Я изменил все те методы Щелчка для строения только из простого, вызова без параметров.

  2. Я затем создал новый файл (Частичный Класс) названный EntryPoint, который имел много очень короткого Друга Нижние индексы, каждые из которых обычно были одним или двумя вызовами к параметризованным функциям рабочего, так, чтобы все методы Щелчка, просто названные в этот файл. Так, например, существует функция, которая открывает стандартный документ и называет "сохранить Как" в наш DMS. Функция берет параметр который документ открыться, и существует несколько дюжин стандартных документов, которые мы используем.

Таким образом, я имею

Private Sub btnMemo_Click(ByVal Ctrl As Microsoft.Office.Core.CommandBarButton, ByRef CancelDefault As Boolean) Handles btnMemo.Click
    DocMemo()
End Sub

в ThisAddin и затем

Friend Sub DocMemo()
    OpenDocByNumber("Prec", 8862, 1)
End Sub

в моем новом файле EntryPoints.

  1. Я добавляю новый файл AddInUtilities, который имеет

    Открытый интерфейс IAddInUtilities

#If DEBUG Then

Sub DocMemo()

#End If

End Interface


Public Class AddInUtilities
    Implements IAddInUtilities
    Private Addin as ThisAddIn

#If DEBUG Then

Public Sub DocMemo() Implements IAddInUtilities.DocMemo
    Addin.DocMemo()
End Sub

#End If

 Friend Sub New(ByRef theAddin as ThisAddIn)
     Addin=theAddin
 End Sub
 End Class
  1. Я перехожу к файлу ThisAddIn и включаю

    Частные утилиты As AddInUtilities

    Защищенные утилиты Is Nothing Then утилит Overrides Function RequestComAddInAutomationService () As Object If = Конечная функция утилит New AddInUtilities (Me) End If Return

И теперь возможно протестировать DocMemo () функция в EntryPoints с помощью NUnit, чего-то вроде этого:

<TestFixture()> Public Class Numbering

Private appWord As Word.Application
Private objMacros As Object

<TestFixtureSetUp()> Public Sub LaunchWord()
    appWord = New Word.Application
    appWord.Visible = True

    Dim AddIn As COMAddIn = Nothing
    Dim AddInUtilities As IAddInUtilities
    For Each tempAddin As COMAddIn In appWord.COMAddIns
        If tempAddin.Description = "CobbettsMacrosVsto" Then
            AddIn = tempAddin
        End If
    Next
    AddInUtilities = AddIn.Object
    objMacros = AddInUtilities.TestObject


End Sub

<Test()> Public Sub DocMemo()


    objMacros.DocMemo()
End Sub

<TestFixtureTearDown()> Public Sub TearDown()
    appWord.Quit(False)
End Sub

End Class

Единственной вещью Вы не можете затем модульный тест, являются фактические события Click, потому что Вы звоните в EntryPoints по-другому, т.е. через интерфейс RequestComAddInAutomationService, а не через обработчики событий.

Но это работает!

3
ответ дан 17 December 2019 в 04:54
поделиться

Считайте различные платформы насмешки NMock, RhinoMocks, и т.д. для фальсифицирования поведения Office в тестах.

2
ответ дан 17 December 2019 в 04:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: