Nesta última parte do artigo finalizaremos os nossos teste
Muito bem, podemos agora codificar o Program.cs para testarmos o funcionamento do projeto. Na classe Program.cs adicione os seguintes “usings”:
using System;using System.Collections.Generic;using System.IO;using TestProject.Model;
using TestProject.BO;
Depois, dentro da classe Program crie o seguinte método:
static byte[] GetFile()
{
byte[] buffer = null;
string fileName = @"C:\teste.jpg";
FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
long numBytes = new FileInfo(fileName).Length;
buffer = br.ReadBytes((int)numBytes);
return buffer;
}
Este método pega os bytes de um arquivo qualquer no disco. Modifique a linha string fileName = @"C:\teste.jpg" para apontar para ajgum arquivo no seu disco rígido. Vai servir para inserirmos uma array de bytes no campo “prod_img_bytes”, do BD. Esse campo é do tipo image.
Agora dentro do método Main adicione os seguintes comandos:
Produto prod = new Produto();
prod.Desc = "Teste Produto Update 12";
prod.Id = 2;
prod.Imagem = "1231232132132";
prod.Nome = "Teste Insert";
prod.Preco = Decimal.Parse("125,77");
prod.Url = "jodijfosi";
prod.ImagemByte = GetFile();
Nesse bloco de comandos apenas instanciamos um objeto do tipo Produto (classe model) e setamos suas propriedades. Note que utilizamos o método “GetFile()”, que retorna um array de bytes, referentes a um arquivo.
Vamos agora testar o método “TestaInsertUpdateTrans” da classe ProdutoBO:
ProdutoBO boProduto = new ProdutoBO();
boProduto.TestaInsertUpdateTrans(prod);
Console.WriteLine("Produto '{0}' Inserido e alterado com sucesso", prod.Id);
Console.WriteLine();
Console.ReadKey();
Antes de testarmos, vou colocar o método Main completo da classe Program:
static void Main(string[] args)
{
try
{
Produto prod = new Produto();
prod.Desc = "Teste Produto Update 12";
prod.Imagem = "1231232132132";
prod.Nome = "Teste Insert";
prod.Preco = Decimal.Parse("125,77");
prod.Url = "jodijfosi";
prod.ImagemByte = GetFile();
ProdutoBO boProduto = new ProdutoBO();
boProduto.TestaInsertUpdateTrans(prod);
Console.WriteLine("Produto '{0}' Inserido e alterado com sucesso", prod.Id);
Console.WriteLine();
Console.ReadKey();
}
catch (Exception ex)
{
if (ex.InnerException == null)
{
Console.WriteLine(ex.Message);
}
else
{
Console.WriteLine(ex.InnerException.Message);
}
}
finally
{
Console.ReadKey();
}
}
Vamos testar nossa aplicação e ver o resultado
na tela:

Ilustração 15
– Resultado do método que insere um produto
No meu
caso, como já existem alguns produtos cadastrados na tabela, o sistema retornou
o id 97. Vamos olhar no BD o produto com ID 97:

Ilustração 16 – Registros da tabela Produto
Vemos aqui que tudo foi inserido e alterado corretamente,
inclusive o campo prod_img_byte que é um image.
Vamos agora testar o método da classe ProdutoBO que retorna
uma lista de produtos. Vamos adicionar os seguintes comando ao método Main da
classe Program:
Console.Clear();
List listRetorno = boProduto.GetListaSemFiltro();
if (listRetorno.Count > 0)
{
foreach (Produto pro in listRetorno)
{
Console.WriteLine("ProdutoId = " + pro.Id + " imagem_Byte = " + pro.ImagemByte.Length);
}
}
Console.ReadKey();
Instanciamos um List do tipo Produto e chamamos o método GetListaSemFiltro
do objeto ProdutoBO.
Caso o método retorne algum registro, percorremos a lista para imprimir na tela
os IDs dos produtos da lista.
Rodando o programa teremos as seguintes telas:

Ilustração 17 – Resultado da inserção de produto
Essa tela
demonstra que mais um produto foi incluido e alterado, pois é o resultado do
primeiro método que testamos.

Ilustração 18 – Resultado do teste que retorna a lista de produtos contidos no banco
Essa tela demonstra que o método que retorna a lista de
produtos funcionou corretamente.
public List TestaBDTeste2(Produto pObj)
{
List retorno = null;
using (base.TransactionScope("sqlServerConn2"))
{
this.ExecuteProcInsert(pObj);
pObj.Nome = "teste BD2";
this.ExecuteProcUpdate(pObj);
retorno = base.ExecuteProcSelectNoFilter();
}
return retorno;
}
Este método irá acessar o BD TESTE2, fará um insert, um
update e retornará a lista de produtos.
[Console.Clear();
List listRetornoBD2 = boProduto.TestaBDTeste2(prod);
if (listRetornoBD2.Count > 0)
{
foreach (Produto pro in listRetornoBD2)
{
Console.WriteLine("ProdutoId do BD2 = " + pro.Id + " imagem_Byte = " + pro.ImagemByte.Length);
}
}
Console.ReadKey();
Basicamente instanciamos uma nova lista de produtos e
atribuimos seu valor ao retorno do método TestaBDTeste2. Passamos como parâmetro a esse
método o objeto prod que foi criado anteriormente. Caso o método finalize
corretamente, percorremos a lista e imprimimos os IDs dos produtos.

Ilustração 19
– Resultado do método que acessa outro BD para retonar uma lista de produtos

Ilustração 20 – Retirada do atributo “AttDataAccessType”
Ao rodar o
programa temos a seguinte mensagem de erro:

Ilustração 21 – Mensagem de erro