您的位置:首页 > 其它

SharePoint API测试系列——对Recorded Item做OM操作(委托的妙用)

2015-10-14 18:01 253 查看
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/

对Recorded Item动态调用OM Methods进行测试,界面如下:



输入Site的URL,File在SharePoint中的相对URL,并选择OM操作类型,点击Test进行测试。代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.SharePoint;

namespace RecordsOMTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
OMMethods_comboBox.Items.Add("Rename");
OMMethods_comboBox.Items.Add("File item delete");
OMMethods_comboBox.Items.Add("File delete");
OMMethods_comboBox.Items.Add("File item recycle");
OMMethods_comboBox.Items.Add("File recycle");
OMMethods_comboBox.Items.Add("File undo check out");
OMMethods_comboBox.Items.Add("File check in");
OMMethods_comboBox.Items.Add("File check out");
}

public delegate void CallOMMethod(SPFile file);

private void test_button_Click(object sender, EventArgs e)
{
/*
Block delete test.
*/
//Rename test.
CallOMMethod Rename = file => { file.Item["Name"] = "kkk.txt"; file.Item.Update(); };
//Delete test 1.
CallOMMethod delete1 = file => { file.Item.Delete(); };
//Delete test 2.
CallOMMethod delete2 = file => { file.Delete(); };
//Delete test 3.
CallOMMethod delete3 = file => { file.Item.Recycle(); };
//Delete test 4.
CallOMMethod delete4 = file => { file.Recycle(); };

/*
Block edit and delete test.
*/
//UndoCheckOut test.
CallOMMethod UndoCKOut = file => { file.UndoCheckOut(); };
//CheckIn test.
CallOMMethod CkIn = file => { file.CheckIn("Check in."); };
//CheckOut test.
CallOMMethod CkOut = file => { file.CheckOut(); };

switch (OMMethods_comboBox.Text)
{
case "Rename":
//Rename test.
DoOMTest(Rename);
break;
case "File item delete":
DoOMTest(delete1);
break;
case "File delete":
DoOMTest(delete2);
break;
case "File item recycle":
DoOMTest(delete3);
break;
case "File recycle":
DoOMTest(delete4);
break;
case "File undo check out":
DoOMTest(UndoCKOut);
break;
case "File check in":
DoOMTest(CkIn);
break;
case "File check out":
DoOMTest(CkOut);
break;
}
}
private void DoOMTest(CallOMMethod cm)
{
using (SPSite site = new SPSite(siteUrl_textBox.Text))
{
SPWeb web = site.RootWeb;
SPFile file = web.GetFile(filePath_textBox.Text);
try
{
cm.Invoke(file);
//Reach this step means test failed.
result_richTextBox.Text = "Test failed.\r\n";
result_richTextBox.SelectionColor = Color.Red;
}
catch (Exception ex)
{
result_richTextBox.Text = "Test passed.\r\n";
result_richTextBox.Select(0, result_richTextBox.Text.Length);
result_richTextBox.SelectionColor = Color.Green;
result_richTextBox.Text += string.Concat(ex);
}
}
}
}
}


提取每个OM Methods单元测试中的公共部分写成DoOMTest(CallOMMethod cm)方法,对于每个测试中不同的部分通过调用一个委托方法(橙色字体)来代替。然后我们对委托方法的类型进行声明(委托方法需要传入一个SPFile类型的参数):

public delegate void CallOMMethod(SPFile file);


再根据每个测试中的不同部分内容对委托进行实例化:

//Rename test.
CallOMMethod Rename = file => { file.Item["Name"] = "kkk.txt"; file.Item.Update(); };
//Delete test 1.
CallOMMethod delete1 = file => { file.Item.Delete(); };
//Delete test 2.
CallOMMethod delete2 = file => { file.Delete(); };
//Delete test 3.
CallOMMethod delete3 = file => { file.Item.Recycle(); };
//Delete test 4.
CallOMMethod delete4 = file => { file.Recycle(); };
//UndoCheckOut test.
CallOMMethod UndoCKOut = file => { file.UndoCheckOut(); };
//CheckIn test.
CallOMMethod CkIn = file => { file.CheckIn("Check in."); };
//CheckOut test.
CallOMMethod CkOut = file => { file.CheckOut(); };


这就是委托在测试中的妙用,极大的减少了重复代码量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: