Bu konuyla ilgili herhangi bir güvenilir bilgiyi çevrimiçi ortamda bulamadım. Ama bence çok fazla insanı etkilemesi gereken bir konu olmalı.Salesforce: Kart üzerindeki Test sınıflarında vali sınırlarından kaçınmak
Temel olarak sanal alanda basit bir tetikleyici ve test sınıfı yazdım, test ettim ve iyi olduğunda PRD'ye yerleştirdim.
İlk önce doğrulama modunu denedim ve bu hatayı aldım.
System.LimitException: Çok fazla SOQL sorguları: 101
Bu hata, başka bir test sınıfında meydana geldiği gösterilmiştir. Bu yüzden, tetikleyicimdeki test durumlarının çalıştığını ve bunun kalan test senaryolarıyla birleştiğini ve bir şekilde limiti aştığını hissediyorum.
Bu nedenle, birim testlerimizde toplam SOQL sorgusu sayısı 100'den az olmalıdır. Bu, doğru bir şekilde eklemek zor mu? Pek çok test vakasıyla hayal edebiliyorum, kesinlikle 100'den fazla sorguya ihtiyacımız var.
Bu nedenle, bu sınırın önüne geçmek için kullanılabilecek yollar nelerdir, çünkü Salesforce, tek bir kod satırı bile dağıtırken tüm test olaylarını çalıştırır.
Herhangi bir olağan şüpheliden yok ... bir döngü içinde SOQL gibi.
GÜNCELLEME: 2012/08/19: Şimdi
Testi Sınıf Test sınıfının kaynak kodunu yayınlayarak ve tetiklemek am:
@isTest
özel sınıf TestAccountDuplicateWebsiteTrigger {
static testMethod void myUnitTest() {
try{
// TO DO: implement unit test
Test.startTest();
Account a1;
a1 = new Account();
a1.name = 'GMSTest';
a1.Website = 'www.test.com';
Account a2;
a2 = new Account();
a2.name = 'GMSTest2';
a2.Website = 'www.test.com';
Account a3;
a3 = new Account();
a3.name = 'GMSTest3';
a3.Website = 'www.test1.com';
insert a1;
insert a2;
//insert a3;
Test.stopTest();
}
catch (Exception e)
{
}
}
}
Tetik
trigger osv_unique_website_for_account on Account (before insert, before update) {
//Map which has no duplicates with website as the key
Map<String, Account> accountMap = new Map<String, Account>();
for (Account account: System.Trigger.new)
{
//Ensure that during an update, if an website does not change - it should not be treated as a duplicate
if ((account.Website != null) && (System.Trigger.isInsert ||
(account.Website != System.Trigger.oldMap.get(account.Id).Website)))
{
//check for duplicates among the new accounts in case of a batch
if (accountMap.containsKey(account.Website))
{
account.Website.addError('Cannot save account. Website already exists.');
}
else
{
accountMap.put(account.Website, account);
}
}
}
//Now map containing new account websites has been created.
//Check them against the account websites that ALREADY EXIST in salesforce. If website exists, display error.
for (Account account : [SELECT Website FROM Account WHERE Website IN :accountMap.KeySet()])
{
Account newAccount = accountMap.get(Account.Website);
if (newAccount!=null)
{
newAccount.Website.addError('Cannot save account. Website already exists.');
}
}
}
düşüncelerinizi paylaşabilir misiniz?
sayesinde
Calvin
Bu hatayı alıyorsunuz, çünkü Test sınıflarınızdan biri (hepsi değil!) Vali sınırını aşıyor. Hata mesajında sınıf adını görebilirsiniz. Post Bu sınıfın kodunu buradan kontrol edebiliriz. – mast0r
Aslında, gösterilen sınıf PRD'de olan bir sınıftır ve şu anda test durumları iyi çalışıyor. John'un aşağıda yanıtladığı gibi, kodumun test sınıfında yer alması için startTest() ve stopTest() yöntemini kullanmadım. –